一 學習內容
1 霍夫變換用於圓的檢測
二 代碼調試
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
char Figure1[] = "Figure1";
char Figure2_gray[] = "Figure2_gray";
char Figure3_blur[] = "Figure3_blur";
char Figure4_circle[] = "Figure4_circle";
int main() {
Mat src,dst_gray, dst_blur,dst_mid,dst_Circle;
src = imread("e:/2 opencv_projects_zl/Hua5.jpg");
if (src.empty()) {
printf("LoadError...\n");
return -1;
}
namedWindow(Figure1,CV_WINDOW_AUTOSIZE);
imshow(Figure1,src);
//學習新內容:霍夫變換---圓的檢測
//1. 轉化爲灰度圖像
cvtColor(src,dst_gray,CV_BGR2GRAY);
namedWindow(Figure2_gray, CV_WINDOW_AUTOSIZE);
imshow(Figure2_gray, dst_gray);
//2. (高斯濾波)中值濾波
//GaussianBlur(dst_gray,dst_blur,Size(3,3),0,0);
medianBlur(dst_gray, dst_blur, 3);
namedWindow(Figure3_blur, CV_WINDOW_AUTOSIZE);
imshow(Figure3_blur, dst_blur);
//3. 霍夫圓檢測
vector<Vec3f>pCircles;
HoughCircles(dst_blur, pCircles,CV_HOUGH_GRADIENT,1,10,100,10,6,8);//最後兩個參數用於控制圓半徑的取值範圍
Scalar color = Scalar(50,50,200);
for (size_t i = 0; i < pCircles.size(); i++)
{
Vec3f Hcircle = pCircles[i];
circle(src,Point(Hcircle[0], Hcircle[1]), Hcircle[2],color,2,LINE_4);
}
namedWindow(Figure4_circle, CV_WINDOW_AUTOSIZE);
imshow(Figure4_circle, src);
waitKey(0);
return 0;
}
三 調試結果