opencv实现:(绘制轮廓的最大内接圆和最小外接圆)C++
时间: 2024-11-27 11:18:24 浏览: 107
在OpenCV中,你可以使用以下几个步骤来绘制轮廓的最大内接圆和最小外接圆:
1. **读取图像并转换为灰度**:
```cpp
Mat image = imread("image.png", IMREAD_GRAYSCALE);
```
2. **边缘检测**:
使用`Canny`函数进行边缘检测,得到边缘轮廓:
```cpp
vector<Vec4i> edges;
Canny(image, edges, lowThreshold, highThreshold);
```
3. **寻找轮廓**:
```cpp
std::vector<std::vector<Point>> contours;
std::vector<Vec4i> hierarchy;
findContours(edges, contours, hierarchy, RETR_LIST, CHAIN_APPROX_SIMPLE);
```
4. **计算最大内接圆和最小外接圆**:
对于每一个轮廓,可以遍历其顶点并应用`minEnclosingCircle`和`boundingRect`函数:
```cpp
for (size_t i = 0; i < contours.size(); ++i) {
Point2f center, radius;
circle(image, center, radius, Scalar(255, 0, 0), 2); // 绘制内切圆
rectangle(image, Rect(minPoint(contours[i]), Size()), Scalar(0, 255, 0), 2); // 绘制最小外接矩形
}
```
`minEnclosingCircle`返回的是轮廓的最小包围圆形,`boundingRect`则给出的是最小包含该轮廓的矩形。
5. **显示结果**:
```cpp
imshow("Contours", image);
waitKey();
```
阅读全文