opencv/c++ 霍夫圆检测代码
时间: 2023-11-13 22:08:21 浏览: 175
testcirle.rar_c++检测圆
以下是使用OpenCV库实现的霍夫圆检测的示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取图片
Mat img = imread("circles.jpg", IMREAD_COLOR);
// 转为灰度图
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
// 高斯滤波,去噪声
GaussianBlur(gray, gray, Size(9, 9), 2, 2);
// 霍夫圆检测
vector<Vec3f> circles;
HoughCircles(gray, circles, HOUGH_GRADIENT, 1, gray.rows/8, 200, 100, 0, 0);
// 画出圆
for (size_t i = 0; i < circles.size(); i++)
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
circle(img, center, radius, Scalar(0, 0, 255), 2, LINE_AA);
}
// 显示结果
imshow("circles", img);
waitKey(0);
return 0;
}
```
在这个示例代码中,我们首先读取了一张圆形图片,然后将其转为灰度图并进行高斯滤波。接着,我们使用`HoughCircles`函数进行霍夫圆检测,得到圆的参数。最后,我们使用`circle`函数在原图上画出检测到的圆,并将结果显示出来。
需要注意的是,`HoughCircles`函数的参数需要根据具体情况进行调整,例如第四个参数控制圆心间的距离阈值,第五个参数控制圆半径的最小值,第六个参数控制边缘梯度的阈值等等。
阅读全文