如何使用minAreaRect函数?如何使用该函数返回的参数绘制矩形?
2条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
在OpenCV库中,
minAreaRect()
函数用于计算给定点集的最小面积外接矩形。下面将详细解释如何使用该函数,并展示如何根据返回参数绘制矩形。1. 准备点集
首先,你需要一个包含2D点的向量(
std::vector<cv::Point2f>
),这些点将用来计算最小面积外接矩形。#include <opencv2/opencv.hpp> #include <vector> std::vector<cv::Point2f> points = { cv::Point2f(10, 20), cv::Point2f(30, 40), cv::Point2f(50, 60), // 假设你有一些点坐标 // ... 其他点 };
2. 使用minAreaRect()函数
调用
cv::minAreaRect()
函数来获取最小面积外接矩形:cv::RotatedRect rect = cv::minAreaRect(points);
cv::RotatedRect
结构体包含了矩形的位置、尺寸和旋转角度信息。center
: 矩形中心点坐标size
: 矩形的宽和高(cv::Size2f
)angle
: 矩形旋转角度(逆时针方向,单位是度)
3. 绘制最小面积外接矩形
接下来,我们可以利用得到的
rect
参数绘制出这个最小面积外接矩形到图像上。假设你已经有了一个cv::Mat
类型的图像img
,你可以这样做:// 创建一个与原图同样大小的黑色背景图像用于绘制矩形 cv::Mat img_with_rect = img.clone(); img_with_rect.setTo(cv::Scalar(0, 0, 0)); // 计算四个顶点 std::vector<cv::Point> box_points; box_points.push_back(cv::Point(rect.boundingRect().tl())); box_points.push_back(cv::Point(rect.boundingRect().br())); box_points.push_back(cv::Point(rect.boundingRect().tr())); box_points.push_back(cv::Point(rect.boundingRect().bl())); // 转换为旋转后的坐标 cv::Mat_<float> rot_mat = getRotationMatrix2D(rect.center, -rect.angle, 1.0); for (int i = 0; i < 4; ++i) { cv::Point2f pt(box_points[i]); cv::Mat_<float> pt_rot(3,1); pt_rot << pt.x, pt.y, 1; rot_mat * pt_rot; box_points[i] = cv::Point(pt_rot.at<float>(0) + rect.center.x, pt_rot.at<float>(1) + rect.center.y); } // 绘制矩形轮廓 cv::polylines(img_with_rect, std::vector<std::vector<cv::Point>>({ box_points }), true, cv::Scalar(0, 255, 0), 2); // 显示或保存结果图像 cv::imshow("Min Area Rect", img_with_rect); cv::waitKey(0);
请注意,上述代码片段涉及到矩阵旋转操作,这部分是为了准确地按照旋转角度绘制矩形。这里简化了矩阵旋转的过程,实际应用中可能需要根据
rect.angle
进行更精确的坐标变换。由于无法直接在此生成模拟图,请参照以上描述自行理解绘制过程。同时,为了完整运行这段代码,确保你的环境已正确安装并链接了OpenCV库。如有更多问题,请参阅官方文档: OpenCV: minAreaRect
解决评论 打赏 举报无用 1
悬赏问题
- ¥15 CPLEX用OPL编写的混合整数线性优化问题。
- ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
- ¥15 前端预览docx文件,文件从后端传送过来。
- ¥15 层次聚类和蛋白质相似度
- ¥25 主成分分析中的第一第二主成分分别代表哪些参数
- ¥15 oracle数据库查询语句问题
- ¥15 有没有c++绘制算法的佬们吗救孩一下
- ¥15 android 蓝牙闪退
- ¥15 绝缘子污秽comsol仿真参数
- ¥15 labelme生成的json有乱码?