資源簡介
cvHoughCircle用于檢測單個圓的效果較好,當檢測到同心圓時,效果欠佳。本程序做了一些改進,使得同心圓檢測效果較好

代碼片段和文件信息
#include???
#include???
#include?
using?namespace?cv;??
using?namespace?std;//注意!!
int?main(?)??
{??
????Mat?srcImage?=?imread(“part.png“);??
imshow(“【原始圖】“?srcImage);
int?rows=srcImage.rowscols=srcImage.cols;
Mat?grayImagebinaryImage;
cvtColor(srcImagegrayImage?CV_BGR2GRAY);
threshold(grayImagebinaryImage200255THRESH_BINARY);
Mat?tempoutImage;
binaryImage.copyTo(temp);
binaryImage.copyTo(outImage);
//Temp是一張全白的圖像
for(int?i=0;i for(int?j=0;j temp.at(ij)=0;
temp.copyTo(outImage);
????cvtColor(srcImagegrayImage?CV_BGR2GRAY);
threshold(grayImagebinaryImage200255THRESH_BINARY);
imshow(“【二值圖像】“binaryImage);
Canny(binaryImagebinaryImage1002003);
imshow(“【邊緣圖像】“binaryImage);
????//【4】進行霍夫圓變換??
????vector?circles0;
vector?circles1;
HoughCircles(binaryImage?circles0?CV_HOUGH_GRADIENT3?10?200?250?10?200?);?
HoughCircles(binaryImage?circles1?CV_HOUGH_GRADIENT2.9?300?200?120?10?100?);?
??
????//【5】依次在圖中繪制出圓??
????for(?size_t?i?=?0;?i?????{??
????????Point?center(cvRound(circles1[i][0])?cvRound(circles1[i][1]));??
????????int?radius?=?cvRound(circles1[i][2]);???
????????circle(?temp?center?radius?Scalar(255255255)?0.5?8?0?);??
????}??
for(?size_t?i?=?0;?i? {??
Point?center(cvRound(circles0[i][0])?cvRound(circles0[i][1]));??
int?radius?=?cvRound(circles0[i][2]);???
circle(?temp?center?radius?Scalar(255255255)?0.5?8?0?);??
}??
threshold(temptemp200255THRESH_BINARY);
imshow(“【初次檢測圖】“?temp);
//將得到的二值圖像和原圖產生的二值圖像相與,取出相應的圓
for(int?i=0;i for(int?j=0;j {
if((binaryImage.at(ij)==255)?&&?(temp.at(ij)==255))
outImage.at(ij)=255;
else?
outImage.at(ij)=0;
}
imshow(“【二次檢測圖】“outImage);
????waitKey(0);??
????return?0;????
}??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2155??2015-03-31?21:21??hough_circle.cpp
-----------?---------??----------?-----??----
?????????????????2155????????????????????1
- 上一篇:windows下自動FTP腳本
- 下一篇:dxc采集器破解版vip3.0
評論
共有 條評論