c++opencv findContours轮廓后分别拟合圆
时间: 2023-07-07 21:45:27 浏览: 219
好的,您可以使用以下步骤来进行轮廓拟合圆:
1. 使用 `findContours` 函数找到图像中的轮廓。
2. 对于每一个轮廓,使用 `approxPolyDP` 函数将其拟合成为一个多边形,以便于后续的圆拟合。
3. 使用 `fitEllipse` 函数对多边形进行圆拟合,得到拟合后的圆心和半径。
4. 可以选择性地使用 `drawContours` 函数将拟合后的圆绘制在原图像上。
下面是一个简单的示例代码,其中 `srcImg` 是输入的图像,`dstImg` 是输出的图像,`contours` 是找到的轮廓:
```cpp
Mat srcImg, dstImg;
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
srcImg = imread("your_image_path");
cvtColor(srcImg, dstImg, COLOR_BGR2GRAY);
findContours(dstImg, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
for (size_t i = 0; i < contours.size(); i++)
{
vector<Point> poly;
approxPolyDP(contours[i], poly, 3, true);
if (poly.size() >= 5)
{
RotatedRect rect = fitEllipse(poly);
ellipse(srcImg, rect, Scalar(0, 255, 0), 2);
}
}
```
这段代码将找到的每一个轮廓进行多边形拟合,并对拟合后的多边形进行圆拟合,并将圆绘制在原图像上。当然,您可以根据自己的需求进行修改。
阅读全文