opencv開發之霍夫變換檢測圓的基本原理:其實檢測圓形和檢測直線的原理差別不大,只不過直線是在二維空間,因為y=kx+b,只有k和b兩個自由度。而圓形的一般性方程表示為(x-a)2+(y-b)2=r2。
那麼就有三個自由度圓心座標a,b,和半徑r。這就意味著需要更多的計算量,而opencv中提供的cvhoughcircle()函式裡面可以設定半徑r的取值範圍,相當於有乙個先驗設定,在每乙個r來說,在二維空間內尋找a和b就可以了,能夠減少計算量。
具體步驟如下:
1.對輸入影象進行邊緣檢測,獲取邊界點,即前景點。
2.假如影象中存在圓形,那麼其輪廓必定屬於前景點(此時請忽略邊緣提取的準確性)。
3.同霍夫變換檢測直線一樣,將圓形的一般性方程換一種方式表示,進行座標變換。由x-y座標系轉換到a-b座標系。寫成如下形式(a-x)2+(b-y)2=r2。那麼x-y座標系中圓形邊界上的一點對應到a-b座標系中即為乙個圓。
4.那x-y座標系中乙個圓形邊界上有很多個點,對應到a-b座標系中就會有很多個圓。由於原影象中這些點都在同乙個圓形上,那麼轉換後a,b必定也滿足a-b座標系下的所有圓形的方程式。直觀表現為這許多點對應的圓都會相交於乙個點,那麼這個交點就可能是圓心(a, b)。
5.統計區域性交點處圓的個數,取每乙個區域性最大值,就可以獲得原影象中對應的圓形的圓心座標(a,b)。一旦在某乙個r下面檢測到圓,那麼r的值也就隨之確定。
以下面的為例,呼叫opencv中的cvhoughcircles()進行圓形的檢測,左邊為原圖,右邊為檢測結果,圓形都被圈出。
**:#include"cv.h"
#include"highgui.h"
#include
using namespace cv;
void main()
cvnamedwindow("img", 1);
cvshowimage("img", srcimg);
cvwaitkey(-1);
cvreleaseimage(&srcimg);
cvdestroyallwindows();
}
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之霍夫變換圓檢測
霍夫變換就是將平面影象轉換到霍夫空間 極座標 進行特徵計算 圓的幾何標準方程 x a 2 y b 2 r 2 x a 2 y b 2 r 2 x a 2 y b 2 r2圓的極座標方程 x a rco s x a rcos theta x a rc os y b rs in y b rsin the...
opencv 霍夫變換檢測圓環
hough 圓環變換 學習使用霍夫變換在影象中找圓形 環 學習函式 cv2.houghcircles 原理 圓形的數學表示式為 我們要使用的函式為 cv2.houghcircles 這裡我們就直接看 吧。import cv2 import numpy as np img cv2.imread ima...