opencv學習筆記18-霍夫變換-霍夫直線檢測

只用來記錄學習筆記

霍夫直線變換:
在這裏插入圖片描述
r=xcosθ+ysinθ

任取一個點,做0-180度(或者0-360)直線,每條直線有一個(θ,r),這樣就能繪製出如圖的曲線:

在這裏插入圖片描述

在這裏插入圖片描述

如果有三個點的(θ,r)曲線都交於一點(假設(θ=1,r=8)),那就說明三個點在一條直線上,那條直線就是相交的那個點(θ=1,r=8)所代表的直線。

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
)

代碼:

  1. 提取邊緣:
	Canny(src, gray_src, 150, 200);
	cvtColor(gray_src, dst, CV_GRAY2BGR);

提取邊緣的筆記:opencv學習筆記17-邊緣檢測-Canny算法

  1. 霍夫直線檢測:
vector<Vec4f> plines;
	HoughLinesP(gray_src, plines, 1, CV_PI / 180.0, 10, 2, 10);
	//gray_src:輸入圖像,必須8-bit的灰度圖像
	//plines:輸出的極座標來表示直線
	//1:生成極座標時候的像素掃描步長
	//CV_PI / 180.0:生成極座標時候的角度步長,一般取值CV_PI/180
	// 10:閾值,只有獲得足夠交點的極座標點才被看成是直線
	//2:最小直線長度,小於2的都不能算作直線
	//10:最大間隔 一條直線中允許間斷的最大像素爲10,
  1. 將獲得的直線顯示出來,用line函數畫直線
	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("final image", dst);

畫直線的筆記:opencv學習筆記5-劃線、矩陣、圓、橢圓等

效果圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章