C++opencv轮廓最小外接圆
时间: 2023-07-07 21:27:17 浏览: 145
Opencv绘制最小外接矩形、最小外接圆
在OpenCV中,使用cv::minEnclosingCircle函数可以找到给定轮廓的最小外接圆。该函数的参数是一个包含轮廓点集的vector对象,返回值是一个cv::Point2f类型的圆心坐标和一个float类型的半径。
下面是一个示例:
```c++
// 读入图像并进行二值化处理
cv::Mat src = cv::imread("input.png", cv::IMREAD_GRAYSCALE);
cv::Mat binary;
cv::threshold(src, binary, 128, 255, cv::THRESH_BINARY);
// 查找轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 绘制轮廓和最小外接圆
cv::Mat dst = cv::Mat::zeros(src.size(), CV_8UC3);
cv::RNG rng(12345);
for (size_t i = 0; i < contours.size(); i++) {
cv::Scalar color = cv::Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256));
cv::drawContours(dst, contours, i, color, 2);
cv::Point2f center;
float radius;
cv::minEnclosingCircle(contours[i], center, radius);
cv::circle(dst, center, radius, color, 2);
}
cv::imshow("output", dst);
cv::waitKey(0);
```
在这个示例中,我们首先读入了一个灰度图像,并进行了二值化处理。接着,我们使用cv::findContours函数查找二值图像中的轮廓,并将结果保存到contours变量中。然后,我们创建了一个空图像dst,并使用cv::drawContours函数绘制了所有的轮廓。最后,我们使用cv::minEnclosingCircle函数找到了每个轮廓的最小外接圆,并使用cv::circle函数将其绘制到了dst图像中。
阅读全文