【OpenCV3】旋转矩形(cv::RotateRect)的绘制
来源:互联网 发布:太阳的后裔迷彩服淘宝 编辑:程序博客网 时间:2024/06/07 20:03
在OpenCV3中的绘图详解中,我们详细地介绍了opencv3中所支持的各种几何形状的绘制,其中矩形的绘制接口为cv::rectangle(),但是这个接口只能用于绘制正常矩形(即cv::Rect定义的矩形,长是水平,高是竖直),但不支持旋转矩形(cv::RotateRect)的绘制。比如我们使用如下代码,通过若干点来拟合椭圆(cv::fitEllipse()),拟合出的椭圆是以椭圆的外接矩形呈现的,这个椭圆的外接矩形就是一个旋转矩形。
//创建一个用于绘制图像的空白图 cv::Mat image = cv::Mat::ones(480, 640, CV_8UC3);//设置蓝色背景image.setTo(cv::Scalar(100, 0, 0));//输入拟合点 std::vector<cv::Point> points;points.push_back(cv::Point(200, 240));points.push_back(cv::Point(300, 400));points.push_back(cv::Point(400, 360));points.push_back(cv::Point(500, 300));points.push_back(cv::Point(500, 200));points.push_back(cv::Point(300, 150));//将拟合点绘制到空白图上 for (int i = 0; i < points.size(); i++){cv::circle(image, points[i], 5, cv::Scalar(0, 0, 255), 2, 8, 0);}//获取拟合椭圆的外包围矩形cv::RotatedRect rotate_rect = cv::fitEllipse(points);//绘制拟合椭圆cv::ellipse(image, rotate_rect, cv::Scalar(0, 255, 255), 2, 8);cv::imshow("image", image);cv::waitKey(0);
从代码中可以看出,我们可以使用cv::ellipse()来绘制椭圆。但是,如果我们想将这个外接的旋转矩形也绘制出来的话,该怎么操作?opencv中有没有提供专门用于绘制旋转矩形的函数?很遗憾,没有。
下面介绍两种种解决旋转矩形的绘制问题的方案。
1、使用cv::line()逐条边绘制
代码如下:
//获取旋转矩形的四个顶点cv::Point2f* vertices = new cv::Point2f[4];rotate_rect.points(vertices);//逐条边绘制for (int j = 0; j < 4; j++){cv::line(image, vertices[j], vertices[(j + 1) % 4], cv::Scalar(0, 255, 0));}
结果如下:
2、使用cv::drawContours()函数进行绘制
代码如下:
//获取旋转矩形的四个顶点cv::Point2f* vertices = new cv::Point2f[4];rotate_rect.points(vertices);std::vector<cv::Point> contour;for (int i = 0; i < 4; i++){contour.push_back(vertices[i]);}std::vector<std::vector<cv::Point>> contours;contours.push_back(contour);cv::drawContours(image, contours, 0, cv::Scalar(255, 255, 0), 1);
结果如下:
2017.04.11
0 0
- 【OpenCV3】旋转矩形(cv::RotateRect)的绘制
- 矩形旋转后的绘制
- 【OpenCV3】图像旋转与平移——cv::warpAffine()详解
- OpenCV3 外极线的绘制
- openCV中cvRectangle与cv::rectangle绘制矩形边框
- 关于RotateRect的一些说明
- opencv3.0的cv “ACCESS_MASK”冲突
- 【OpenCV3】图像轮廓查找与绘制——cv::findContours()与cv::drawContours()详解
- 【OpenCV3】棋盘格角点检测与绘制——cv::findChessboardCorners()与cv::drawChessboardCorners()详解
- 绘制简单的矩形
- Android开发:SurfaceView上新建线程绘制旋转图片 及 刷新特定区域(脏矩形)
- GDI+绘制矩形,并且实现可旋转、缩放、移动功能(基于MFC对话框)
- OpenCV3.0的神经网络类-MLP(多层感知机参考)[cv::ml::ANN_MLP Class Reference]
- RotatedRect 可选择矩形 的绘制
- android中圆角矩形的绘制
- 2.3_矩形的绘制
- 【OpenCV】通过鼠标在图像中绘制RotatedRect旋转矩形
- 【OpenCV3】cv::Mat中最值和均值的求解
- HDU 1503 Advanced Fruits (LCS最长公共子序列)
- kettle使用demo
- 数据结构之双向链表
- 看完让你彻底搞懂Websocket原理
- QT学习笔记之MySql如何计算两个时间段相隔的天数
- 【OpenCV3】旋转矩形(cv::RotateRect)的绘制
- visual修改之后运行
- 基于物理着色原理讲解之一
- transframe属性详解
- Re-ID with Triplet Loss
- JAVA基础之---为什么不通过方法的返回值来区分重载方法
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 生命不只有
- asterisk常用命令