1. 程式人生 > >opencvC++學習20霍夫變換-直線

opencvC++學習20霍夫變換-直線

霍夫直線變換介紹

Hough Line Transform用來做直線檢測
前提條件 – 邊緣檢測已經完成

平面空間到極座標空間轉換



對於任意一條直線上的所有點來說
變換到極座標中,從[0~360]空間,可以得到r的大小

屬於同一條直線上點在極座標空(r, theta)必然在一個點上有最強的訊號出現,根據此反算到平面座標中就可以得到直線上各點的畫素座標。從而得到直線

從平面座標變換到霍夫空間(極座標)

API:

標準的霍夫變換 cv::HoughLines從平面座標轉換到霍夫空間,最終輸出是      表示極座標空間

霍夫變換直線概率 cv::HoughLinesP最終輸出是直線的兩個點

cv::HoughLines(
InputArray src, // 輸入影象,必須8-bit的灰度影象
OutputArray lines, // 輸出的極座標來表示直線
double rho, // 生成極座標時候的畫素掃描步長
double theta, //生成極座標時候的角度步長,一般取值CV_PI/180
int threshold, // 閾值,只有獲得足夠交點的極座標點才被看成是直線
double srn=0;// 是否應用多尺度的霍夫變換,如果不是設定0表示經典霍夫變換
double stn=0;//是否應用多尺度的霍夫變換,如果不是設定0表示經典霍夫變換
double min_theta=0; // 表示角度掃描範圍 0 ~180之間, 預設即可
double max_theta=CV_PI

) // 一般情況是有經驗的開發者使用,需要自己反變換到平面空間

cv::HoughLinesP(
InputArray src, // 輸入影象,必須8-bit的灰度影象
OutputArray lines, // 輸出的極座標來表示直線
double rho, // 生成極座標時候的畫素掃描步長
double theta, //生成極座標時候的角度步長,一般取值CV_PI/180
int threshold, // 閾值,只有獲得足夠交點的極座標點才被看成是直線
double minLineLength=0;// 最小直線長度
double maxLineGap=0;// 最大間隔

)

程式碼:

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

Mat src, gray_src, dst;


int main()
{
	
	 src = imread("D:/opencvSRC/line2.jpg");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);

	
	
	cvtColor(src, src, CV_BGR2GRAY);
	cvtColor(src, dst, CV_GRAY2BGR);
	Canny(src, gray_src, 150, 200);
	//cvtColor(gray_src, dst, CV_BGR2GRAY);
	imshow("iamge", gray_src);

	vector<Vec4f> plines;
	HoughLinesP(gray_src, plines, 1, CV_PI / 180, 10, 0.0, 10);
	Scalar color = Scalar(0, 0, 255);
	for (size_t i = 0; i < plines.size(); i++) {
		Vec4f hline = plines[i];
		line(dst, Point(hline[0], hline[1]), Point(hline[2], hline[3]), color, 3, LINE_AA);
	}
	imshow("iamge2", dst);

	waitKey(0);
	return 0;
}

效果:


相關推薦

opencvC++學習20變換-直線

霍夫直線變換介紹Hough Line Transform用來做直線檢測前提條件 – 邊緣檢測已經完成平面空間到極座標空間轉換對於任意一條直線上的所有點來說變換到極座標中,從[0~360]空間,可以得到r的大小屬於同一條直線上點在極座標空(r, theta)必然在一個點上有最強

opencvC++學習21變換

霍夫圓檢測原理從平面座標到極座標轉換三個引數假設平面座標的任意一個圓上的點,轉換到極座標中:處有最大值,霍夫變換正是利用這個原理實現圓的檢測。API: cv::HoughCircles因為霍夫圓檢測對噪

OpenCV入門:Hough變換-直線選擇(HoughLinesP)

霍夫變換HoughLinesP函式 #include <iostream> #include <fstream> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp>

變換——直線檢測

霍夫變換(Hough)通過轉換座標系,將特定形狀的檢測對映到引數空間中,從而根據引數空間中的值來確定特定形狀的相關資訊。   Hough變換的比較簡單的應用例子有檢測直線。 檢測直線   設空間中有若干點,我們要判斷這些點是否能構成一條直線,即為直線檢測。

變換直線檢測houghlines及opencv的實現分析

導讀: 1. houghlines的演算法思想 2. houghlines實現需要考慮的要素 3. houghlines的opencv實現,程式碼分析 4. houghlines的效率分析,改進 1. houghlines的演算法思想 檢測直線,houghlines標準演算

Opencv——變換直線檢測及原理理解

霍夫變換(Hough Transform)是影象處理中的一種特徵提取技術,它通過一種投票演算法檢測具有特定形狀的物體。該過程在一個引數空間中通過計算累計結果的區域性最大值得到一個符合該特定形狀的集合作為霍夫變換結果。霍夫變換於1962年由Paul Hough 首次提出[53],後於1972年由Richard

變換直線檢測的matlab實現

clear all; BW=imread('hough1.jpg'); BW=rgb2gray(BW); %BW=medfilt2(BW,[2 2]) thresh=[0.01,0.10]; sigma=2;%定義高斯引數 f = edge(double(BW),'canny',t

變換直線檢測及原理理解

Radon變換則以線積分的形式把影象空間投影到ρθ空間(等同於直線的引數空間)。 直線Hough變換與Radon變換的區別在於前者是直線引數變換的離散形式,而後者則是直線引數變換的連續形式。所以Hough變換直接應用在二值影象上,而Radon變換直接應用在灰度影象上。另外,由於二值影象只需要處理前景或者背景畫

變換直線檢測基本原理hough,houghpeaks,houghlines

一步一步來: 1、在白紙上畫出一個直角座標系,任意給出一個點; 2、那麼,對於點(x0,y0),經過這個點的直線必定滿足y0=k*x0+b, 其中k是直線的斜率,b是直線的截距; 3、上式可以化成b=y0-k*x0,  可以看作是以-x0為斜率,以y0為截距,在k

Matlab實現——變換直線檢測

霍夫變換實現直線檢測——MATLAB網上好多不能用,就重新寫了一個:% 入口影象為 BW,出口影象為f clc,close BW=imread('D:\picture\9dafa605d53eea243812bb29.jpg'); BW=rgb2gray(BW); thres

學習opencv】實現變換(1)檢測直線

目前想對於霍夫圓檢測進行修改,想法是若能在固定圓心的橫座標的情景下去搜索圓,若要實現就需要對霍夫檢測有一定的深入瞭解。 霍夫變換原理 霍夫變換原理實則就是引數空間的轉變。 極座標轉換 首先因為直角座標系中垂直於x軸的直線不存在,即轉換用極座標表示

20、【opencv入門】變換變換變換合輯

接收 最大 sta point hci 都在 imread 創建 滾動 一、引言   在圖像處理和計算機視覺領域中,如何從當前的圖像中提取所需要的特征信息是圖像識別的關鍵所在。在許多應用場合中需要快速準確地檢測出直線或者圓。其中一種非常有效的解決問題的方法是霍夫(Hough

8.變換:線條——介紹、引數模型、直線擬合_1

目錄 介紹 引數模型 直線擬合 介紹 到目前為止,我們一直在做影象處理,你把一個影象 和 應用一些函式相加得到一個新的影象我標記為。 這很好,整個課程,實際上是整個職業生涯,數以萬計的PHD寫在影象處理上。 但這不是我們來這裡的原因。 我們來談談真正的計

Opencv2.4學習::變換(1)線變換

霍夫變換 特點: 用於識別幾何形狀 不受旋轉角度影響  線變換基本原理 對於上述不理解的,可以看下面: 對於某直線,可以過原點作其法向量,假設在 ρ為原點到直線距離 和 θ已知的情況下 因此,該直線的   截距=ρ/sin θ   ,     斜率=  -1

Opencv2.4學習::變換(2)圓變換

霍夫圓變換 基本原理  關於基本原理,其思想大概跟霍夫線變換相似,但是有兩種說法。 第一種: 在霍夫線變換中,笛卡爾X-Y直角座標系中的直線,變換到霍夫空間中則為1個點 因此類比可得,笛卡爾X-Y直角座標系中的圓,變換到abr空間中,則為一條曲線,具體如下:

變換檢測直線原理及例項

霍夫變換原理 霍夫變換(Hough Transform)是影象處理中的一種特徵提取技術,該過程在一個引數空間中通過計算累計結果的區域性最大值得到一個符合該特定形狀的集合作為霍夫變換結果。 直線可以由直角座標或極座標表示,直線可以由直角座標或極座標表示,直角座標表示直線時,

利用變換直線檢測的原理及OpenCV程式碼實現

說白了,以直線檢測為例,霍夫變換實際上就是把使每個畫素座標點經過變換都變成都直線特質有貢獻的統一度量(這種度量以我目前的理解與笛卡爾(極坐系)並無區別,即極半徑和極角),並對轉換後的度量進行累計(可以理解為投票),當一個波峰出現時候,說明有直線存在。如果要了解更詳細的,大

Opencv學習---變換檢測圓的基本原理

為了方便以後檢視,將基本筆記收藏到這裡! 原博文:http://blog.csdn.net/yizhaoyanbo/article/details/59172991     其實檢測圓形和檢測直線的原理差別不大,只不過直線是在二維空間,因為y=kx+b,只有k和b兩

OPENCV變換使用方法——邊緣檢測+變換求出影象中的直線

#include <cv.h>#include <highgui.h>#include <math.h> int main(int argc, char** argv){    IplImage* src;    if( argc == 2

OpenCV學習筆記-變換

霍夫圓變換的函式為:HoughCircles利用 Hough 變換在灰度影象中找圓CvSeq* cvHoughCircles( CvArr* image, void* circle_storage, int method, dou