写一个c++代码,可以求出轮廓的最小外接圆,并求出最小外接圆的半径
时间: 2024-03-10 19:45:24 浏览: 65
求多边形最小外接圆算法
5星 · 资源好评率100%
以下是一个使用OpenCV库的C++代码,可以读取一张图片并对其进行轮廓检测,并计算出每个轮廓的最小外接圆及其半径:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image = imread("image.jpg"); // 读取图片
if (image.empty())
{
cout << "无法读取图片" << endl;
return -1;
}
Mat gray, binary;
cvtColor(image, gray, COLOR_BGR2GRAY); // 将图片转为灰度图
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU); // 对灰度图进行二值化处理
vector<vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); // 执行轮廓检测
for (int i = 0; i < contours.size(); i++)
{
Point2f center;
float radius;
minEnclosingCircle(contours[i], center, radius); // 计算轮廓的最小外接圆及其半径
cout << "第" << i + 1 << "个轮廓的最小外接圆半径为:" << radius << endl;
drawContours(image, contours, i, Scalar(0, 255, 0), 2); // 在原图上绘制轮廓
circle(image, center, radius, Scalar(0, 0, 255), 2); // 在原图上绘制最小外接圆
}
imshow("Contours", image); // 显示处理后的图片
waitKey(0);
return 0;
}
```
需要注意的是,以上代码只会处理图片中最外层轮廓的最小外接圆。如果需要计算其他层次轮廓的最小外接圆,可以将 `RETR_EXTERNAL` 参数改为 `RETR_TREE`,并在循环中加入层次信息的判断。
阅读全文