opencv如何求取一些点集的最小外接矩形
时间: 2023-09-23 13:08:57 浏览: 249
在OpenCV中,可以使用函数`minAreaRect()`来求取一些点集的最小外接矩形。具体步骤如下:
1. 将点集转换为`cv::Mat`类型。
2. 调用`minAreaRect()`函数,传入点集的`cv::Mat`类型参数。
3. 函数返回一个`RotatedRect`类型的对象,表示最小外接矩形。
下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
int main()
{
// 定义点集
std::vector<cv::Point2f> points = {
cv::Point2f(100, 100),
cv::Point2f(200, 200),
cv::Point2f(150, 300),
cv::Point2f(50, 250)
};
// 将点集转换为cv::Mat类型
cv::Mat pointMat(points);
// 求取最小外接矩形
cv::RotatedRect rect = cv::minAreaRect(pointMat);
// 可以通过调用rect的函数来获取最小外接矩形的信息
cv::Point2f rectPoints[4];
rect.points(rectPoints);
// 绘制最小外接矩形和点集
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
for (int i = 0; i < points.size(); i++) {
cv::circle(image, points[i], 3, cv::Scalar(0, 255, 0), -1);
}
for (int i = 0; i < 4; i++) {
cv::line(image, rectPoints[i], rectPoints[(i + 1) % 4], cv::Scalar(0, 0, 255), 2);
}
cv::imshow("Minimum bounding box", image);
cv::waitKey(0);
return 0;
}
```
在上面的代码中,我们首先定义了一个点集,然后将其转换为`cv::Mat`类型,并调用`minAreaRect()`函数求取最小外接矩形。最后,我们绘制了最小外接矩形和点集,效果如下图所示:
![最小外接矩形示例](https://img-blog.csdn.net/20170621135442100?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTM2NzQ1NQ==/font/5a6L5L2T/fontsize/400)
阅读全文