opencv學習之路(18) 霍夫變換

2022-07-13 14:00:21 字數 2145 閱讀 8226

在影象處理和計算機視覺領域中,如何從當前的影象中提取所需要的特徵資訊是影象識別的關鍵所在。在許多應用場合中需要快速準確地檢測出直線或者圓。其中一種非常有效的解決問題的方法是霍夫(hough)變換。

以上原理部分,**

霍夫圓變換的基本原理和上面講的霍夫線變化大體上是很類似的,只是點對應的二維極徑極角空間被三維的圓心點x, y還有半徑r空間取代。說「大體上類似」的原因是,如果完全用相同的方法的話,累加平面會被三維的累加容器所代替:在這三維中,一維是x,一維是y,另外一維是圓的半徑r。這就意味著需要大量的記憶體而且執行效率會很低,速度會很慢。

對直線來說, 一條直線能由引數極徑極角

表示. 而對圓來說, 我們需要三個引數來表示乙個圓, 也就是:

這裡的(xcenter,ycenter)表示圓心的位置 (下圖中的綠點) ,而 r 表示半徑, 這樣我們就能唯一的定義乙個圓了, 見下圖:

在opencv中,我們一般通過乙個叫做「霍夫梯度法」的方法來解決圓變換的問題。

需要注意的是,使用此函式可以很容易地檢測出圓的圓心,但是它可能找不到合適的圓半徑。我們可以通過第八個引數minradius和第九個引數maxradius指定最小和最大的圓半徑,來輔助圓檢測的效果。或者,我們可以直接忽略返回半徑,因為它們都有著預設值0,單單用houghcircles函式檢測出來的圓心,然後用額外的一些步驟來進一步確定半徑。

1 #include "

opencv2/opencv.hpp"2

using

namespace

cv;3

4void

main()

522 imshow("

dst"

, dst);

23 waitkey(0

);24 }

OpenCV學習18 霍夫變換檢測直線

霍夫變換直線檢測 前提條件 邊緣檢測已經完成 單通道8位灰度影象,經過二值化變為黑白影象 平面空間轉到極座標空間 通過上式子可以把畫素點轉化成極座標,如下圖所示。上面的曲線相交與一點,說明了什麼資訊呢?說明這些畫素都在一條直線。比如乙個影象有200個畫素,通過座標變換。那麼就可以得到200條曲線。相...

opencv學習之霍夫變換

原理部分參見 標準霍夫變換示例 opencv 1.cpp 定義控制台應用程式的入口點。include stdafx.h include include includeusing namespace cv using namespace std int main imshow 邊緣檢測後的圖 midi...

OPENCV學習之霍夫變換

霍夫線變換 效果圖 關於霍夫變換線變換的詳細介紹 以下是 int main waitkey 0 return 0 效果圖怎麼跟邊緣檢測的圖一樣?line dst,pt1,pt2,scalar 0 0,255 1,line aa 修改scalar 中的值顏色怎麼不改變?霍夫圓變換 void hough...