对图片进行连通域分析后,如何得到最小外接矩形2?使用C++调用opencv回答
时间: 2023-06-12 13:08:12 浏览: 138
在OpenCV中,可以使用`minAreaRect`函数来计算最小外接矩形。该函数接受一个点集作为输入,并返回一个`RotatedRect`对象,该对象包含了最小外接矩形的中心点、长宽和旋转角度等信息。下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;
using namespace std;
int main()
{
Mat image = imread("your_image_path", IMREAD_GRAYSCALE);
// 假设已经完成了连通域分析,得到了一个点集 contours
vector<vector<Point>> contours; // 点集
vector<Vec4i> hierarchy; // 分层信息
findContours(image, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
// 遍历每个连通域
for (int i = 0; i < contours.size(); i++) {
RotatedRect rect = minAreaRect(contours[i]); // 计算最小外接矩形
Point2f vertices[4];
rect.points(vertices);
for (int j = 0; j < 4; j++) {
line(image, vertices[j], vertices[(j + 1) % 4], Scalar(0, 255, 0), 2); // 绘制最小外接矩形
}
}
imshow("result", image);
waitKey(0);
return 0;
}
```
在上面的代码中,我们使用`findContours`函数找到了图像中的所有连通域,然后对于每个连通域,使用`minAreaRect`函数计算最小外接矩形,并使用`line`函数在原图上绘制出该矩形。最终结果可以通过`imshow`函数显示出来。
阅读全文