OpenCV 霍夫變換直線檢測

2021-09-25 16:26:03 字數 2562 閱讀 5739

霍夫直線檢測的基本原理在於利用點與線的對偶性。

在直角座標系下,一條直線的方程可以用點斜式表示

但是這種表達方式無法表示斜率無窮大的情況(直線垂直於x軸)。

因此,轉化到極座標系下

可以變換為

其中,因此,在直角座標系下的乙個點

也就是說,直角座標系下的乙個點對應極座標系下的一條曲線。反過來也是成立的。

霍夫直線檢測就是把影象空間(直角座標系)中的直線變換到引數空間(極座標系)中的點,通過統計特性來解決檢測問題。

如果一幅影象中的畫素構成一條直線,那麼這些畫素座標值(x, y)在引數空間對應的曲線一定相交於乙個點,所以只需要將影象中的所有畫素點的座標值變換成引數空間的曲線,並在引數空間檢測曲線交點就可以確定直線了。

但是乙個點對應的曲線有無數條,在實際計算時必須是有限的值。因此將引數

opencv中有兩個霍夫直線檢測的介面。

標準霍夫線檢測

void cv::houghlines(inputarray image,

outputarray lines,

double rho,

double theta,

int threshold,

double srn = 0,

double stn = 0,

double min_theta = 0,

double max_theta = cv_pi

)

概率霍夫線檢測

void cv::houghlinesp(inputarray image,

outputarray lines,

double rho,

double theta,

int threshold,

double minlinelength = 0,

double maxlinegap = 0

)

因為這兩個函式的輸入都是二值影象,所以一般的流程都是先對原圖做邊緣輪廓提取,如canny,然後在邊緣二值分布圖上進行霍夫線檢測。

opencv 霍夫變換 直線檢測

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

opencv之霍夫變換直線檢測

霍夫變換之直線檢測 x cos x cos theta x cos y sin y sin theta y sin 2 x2 y2 2 x 2 y 2 2 x2 y2 tan y x x 0 tan theta y x x 0 tan y x x 0 檢測原理 兩點確定一條直線,通過一點可以確定無數...

Opencv 霍夫變換 直線

注意 下面的解釋屬於bradski和kaehler 的 學習opencv 一書。hough line變換是用於檢測直線的變換。為了應用變換,首先需要邊緣檢測預處理。如你所知,影象空間中的一行可以用兩個變數表示。例如 在笛卡爾座標系中 引數 m,b 在極座標系中 引數 r,對於hough 變換,我們將...