OpenCV15 霍夫變換 直線

2021-10-09 08:43:32 字數 1409 閱讀 2570

用來做直線檢測

前提條件是邊緣檢測已完成

平面空間到極座標空間的轉換(實際應用中,引數空間是不能選擇直角座標系的,因為原始影象直角座標空間中的特殊直線x=c(垂直x軸,直線的斜率為無窮大)是沒辦法在基於直角座標系的引數空間中表示的。)

cv::houghlinesp(

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

outputarray lines, // 線的輸出向量。由(x1, y1)、(x2, y2)確定一條直線

double rho, // 以畫素為單位的距離解析度

double theta, //以弧度為單位的角度解析度,一般取值cv_pi/180

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

double minlinelength=0;// 最小直線長度,短語此長度的將被忽略

double maxlinegap=0;// 連線同一條直線所允許的兩點之間最大間隔

)

#include

#include

"opencv2/opencv.hpp"

using

namespace std;

using

namespace cv;

intmain()

namedwindow

("input"

, window_autosize)

;imshow

("input"

, src)

;canny

(src, edges,60,

200,3)

;namedwindow

("edge"

, window_autosize)

;imshow

("edge"

, edges)

;cvtcolor

(edges, color_edg, color_gray2bgr)

; vector plines;

houghlinesp

(edges, plines,

1, cv_pi /

180,20,

0,20)

; scalar color =

scalar(0

,255,0

);for(size_t i =

0; i < plines.

size()

;++i)

//在rgb影象上畫線

namedwindow

("line"

, window_autosize)

;imshow

("line"

, color_edg)

;waitkey(0

);return0;

}

Opencv 霍夫變換 直線

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

opencv 霍夫變換 直線檢測

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

OpenCV 霍夫變換直線檢測

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