c++ 绘制连通域的外接矩形和最小外接矩形
时间: 2023-09-10 13:09:17 浏览: 110
你可以使用OpenCV库来实现C++中连通域外接矩形和最小外接矩形的绘制。以下是一个示例代码:
```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(255), 2);
Point2f vertices[4];
rotated_rect.points(vertices);
for (int j = 0; j < 4; ++j)
line(image, vertices[j], vertices[(j + 1) % 4], Scalar(255), 2);
}
// 显示结果
imshow("Image", image);
waitKey(0);
return 0;
}
```
在这个示例代码中,我们首先读取一张图像并进行二值化处理。然后使用`connectedComponentsWithStats`函数查找连通域,并获取每个连通域的外接矩形和最小外接矩形。最后,使用`rectangle`和`line`函数绘制连通域的外接矩形和最小外接矩形,并显示结果图像。请确保在运行代码之前安装OpenCV库并将图像路径替换为你自己的图像路径。
阅读全文