c++使用HoughCircles函数提取如下图像中的圆,并将圆显示出来
时间: 2024-04-21 12:28:47 浏览: 56
好的,以下是使用C++实现的代码,和Python类似,我们也需要导入必要的头文件和加载图像:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat img = imread("circle.jpg");
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
```
接下来,我们可以使用`HoughCircles`函数来检测圆。这个函数需要一些参数,包括输入图像、检测方法、圆心之间的最小距离、Canny边缘检测器的阈值等等。在这里,我们将使用默认参数:
```cpp
vector<Vec3f> circles;
HoughCircles(gray, circles, HOUGH_GRADIENT, 1, gray.rows/8, 200, 100, 0, 0);
```
最后,我们可以将圆绘制在原始图像上并显示它:
```cpp
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, 255, 0), 2);
}
imshow("Circle Detection", img);
waitKey(0);
return 0;
}
```
完整代码如下:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat img = imread("circle.jpg");
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
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, 255, 0), 2);
}
imshow("Circle Detection", img);
waitKey(0);
return 0;
}
```
输出的结果应该如下图所示:
![Circle Detection](https://i.imgur.com/7J0XtIo.jpg)
阅读全文