OpenCV中霍夫圆检测
生活随笔
收集整理的這篇文章主要介紹了
OpenCV中霍夫圆检测
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
OpenCV中霍夫圓檢測(cè)
在直線檢測(cè)中,變換后在r?θr-\thetar?θ空間內(nèi)曲線交點(diǎn),然后根據(jù)閾值來(lái)得到直線。在圓中需要有三個(gè)變量圓心坐標(biāo)和半徑,因此變換后的空間在三維空間,根據(jù)三維空間中的曲線的交點(diǎn)得到圓。這就是標(biāo)準(zhǔn)的霍夫圓變換。但這個(gè)變換涉及到計(jì)算量過(guò)于巨大,所以很難實(shí)際應(yīng)用。
在實(shí)際應(yīng)用中常用的是:霍夫梯度法\color{#f00}霍夫梯度法霍夫梯度法。算法的原理:圓心一定在圓上每個(gè)點(diǎn)的模向量上,這些圓上的點(diǎn)的模向量的交點(diǎn)就是圓心,霍夫梯度法的第一步便是找到這些圓心,第二部根據(jù)所有候選中心的的邊緣非零像素對(duì)其的支持程度來(lái)確定半徑。
感覺(jué)太墨跡了,說(shuō)說(shuō)個(gè)人理解,不一定正確,希望看到的大佬多多指正。霍夫梯度算法:先做邊緣檢測(cè),然后利用邊緣像素的點(diǎn)模向量相交,發(fā)現(xiàn)可能的圓心,然后再根據(jù)有多少個(gè)邊緣像素的模向量交于圓心,從而得到最佳的半徑。
API:
HoughCircles(輸入圖像,8位單通道vector<Vec3f>變量,發(fā)現(xiàn)圓的信息(x,y,r)int method(CV_HOUGH_GRADIENT)dp,用來(lái)檢測(cè)圓心的累加器圖像的分辨率與輸入圖像之比的導(dǎo)數(shù),如dp=2,累加器有輸入圖像一半的寬度和高度。mindist 最短距離-可以分辨是兩個(gè)圓的,否則認(rèn)為時(shí)同心圓。太小相鄰的檢測(cè)成一個(gè)重合的圓,太大,有些就檢測(cè)不出來(lái)了。param1 傳遞給Canny的高閾值,低的為高閾值的一半。param2 中心累加器閾值-候選圓心,越小檢測(cè)到更多根本不存在的圓,越大能通過(guò)檢測(cè)的圓更加接近完美的圓形。int 最小半徑inti 最大半徑 );下面是一個(gè)小的demo
#include "opencv2/opencv.hpp"using namespace cv; using namespace std;int main(int argc, char *argv[]) {Mat src,dst,temp;RNG rng((unsigned int)time(NULL));src = Mat::zeros(500,500,CV_8UC3);for(int i = 0;i < 5;i++)circle(src,Point(rng.uniform(100,400),rng.uniform(100,400)),rng.uniform(1,100),Scalar(255,255,255),-1);imshow("src",src);cvtColor(src,temp,CV_RGB2GRAY);GaussianBlur(temp,dst,Size(9,9),2,2);vector<Vec3f> circles;HoughCircles(dst,circles,CV_HOUGH_GRADIENT,1,30,200,50,0,0);cout << circles.size() << endl;for(size_t i = 0;i < circles.size();i++){cout << cvRound(circles[i][0]) << "," << cvRound(circles[i][1]) << endl;Point center(cvRound(circles[i][0]),cvRound(circles[i][1]));int radius = cvRound(circles[i][2]);circle(src,center,3,Scalar(0,255,0),-1);circle(src,center,radius,Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),3,8,0);}imshow("back",src);waitKey(0);return 0; }總結(jié)
以上是生活随笔為你收集整理的OpenCV中霍夫圆检测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CUDA学习小记
- 下一篇: Zero Copy 简介