c++ 绘制连通域的外接矩形和最小外接矩形
时间: 2023-09-10 20:09:17 浏览: 146
C++绘图程序,绘制矩形,直线,曲线,三角形,多边形,椭圆,圆;给图形上色,框选图形,文件存储,坐标显示等等功能
以下是一个C++示例代码,使用OpenCV库来绘制连通域的外接矩形和最小外接矩形:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像
Mat image = imread("image.jpg", IMREAD_GRAYSCALE);
// 进行二值化处理
Mat binary;
threshold(image, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
// 查找连通域
Mat labels, stats, centroids;
int num_labels = connectedComponentsWithStats(binary, labels, stats, centroids);
// 绘制连通域外接矩形和最小外接矩形
for (int i = 1; i < num_labels; ++i)
{
// 获取连通域的外接矩形
Rect bounding_rect(stats.at<int>(i, CC_STAT_LEFT),
stats.at<int>(i, CC_STAT_TOP),
stats.at<int>(i, CC_STAT_WIDTH),
stats.at<int>(i, CC_STAT_HEIGHT));
// 获取连通域的最小外接矩形
RotatedRect rotated_rect = minAreaRect(Mat(binary, bounding_rect));
// 绘制连通域外接矩形
rectangle(image, bounding_rect, Scalar(0, 255, 0), 2);
// 获取最小外接矩形的四个顶点
Point2f vertices[4];
rotated_rect.points(vertices);
// 绘制最小外接矩形
for (int j = 0; j < 4; ++j)
line(image, vertices[j], vertices[(j + 1) % 4], Scalar(0, 0, 255), 2);
}
// 显示结果
imshow("Image", image);
waitKey(0);
return 0;
}
```
在这个示例代码中,我们首先读取一张图像并进行二值化处理。然后使用`connectedComponentsWithStats`函数查找连通域,并获取每个连通域的外接矩形和最小外接矩形。最后,使用`rectangle`和`line`函数绘制连通域的外接矩形和最小外接矩形,并显示结果图像。请确保在运行代码之前安装OpenCV库并将图像路径替换为你自己的图像路径。
阅读全文