OpenCV3霍夫變換檢測直線

2021-10-08 20:02:21 字數 1622 閱讀 2568

hough line transform用來做直線檢測

前提條件:邊緣檢測已經完成

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

cv::houghlinesp(

inputarray src.//輸入影象,必須8-bit的灰度影象

outputarray lines,//輸出的極座標來表示直線

double rho,//生成極座標時候的畫素掃瞄步長

double theta,//生成極座標時候的角度步長,一般取值pi/180

int threshold,//閾值,只有獲得足夠交點的極座標點才被看成是直線

double minlinelength=0,//最小直線長度,小於這個長度則不被認為是直線

double maxlinegap=0//最大間隔,直線中斷超過這麼長,則不被認為是一條直線,可能為兩條哈哈

)

//opencv3霍夫變換-直線

#include

#include

using

namespace std;

using

namespace cv;

intmain

(int argc,

char

** ar**)

imshow

("img"

, img)

;//轉換色彩空間

cvtcolor

(img, img, cv_bgr2gray)

;imshow

("gray"

, img)

;//均值濾波-降雜訊

blur

(img, img,

size(3

,3),

point(-

1,-1

), border_default)

;imshow

("blur_img"

, img)

;//canny邊緣檢測

canny

(img, img,50,

50*2,

3,false);

//50為邊緣檢測相關因素值

//50為低閾值

//50*2為高閾值

imshow

("canny_img"

, img)

;//霍夫變換-直線

vectorplines;

//存放發現的點,每個元素有四個元素如[100,12,323,43]

houghlinesp

(img, plines,

1, cv_pi /

180.0,10

,0,0

);//把直線畫上直線

OpenCV3霍夫變換(圓檢測)

cv houghcircles 因為霍夫圓檢測對雜訊比較敏感,所以要對影象做中值濾波 基於效率考慮,opencv中實現的霍夫變換圓檢測時基於影象梯度的實現,分為兩步 1.檢測邊緣,發現可能的圓心 2.基於第一步的基礎上從侯選圓心開始計算最佳半徑大小 houghcircles inputarray i...

opencv 霍夫變換 直線檢測

用來做直線檢測 前提條件是邊緣檢測已經完成,一般用canny來做。cv houghlinesp inputarray src,輸入影象,必須8 bit的灰度影象 outputarray lines,輸出的極座標來表示直線 double rho,生成極座標時候的畫素掃瞄步長,一般是1 double t...

OpenCV 霍夫變換直線檢測

霍夫直線檢測的基本原理在於利用點與線的對偶性。在直角座標系下,一條直線的方程可以用點斜式表示 但是這種表達方式無法表示斜率無窮大的情況 直線垂直於x軸 因此,轉化到極座標系下 可以變換為 其中,因此,在直角座標系下的乙個點 也就是說,直角座標系下的乙個點對應極座標系下的一條曲線。反過來也是成立的。霍...