C++ OpenCV画旋转矩形 并返回四个顶点

  • 函数 rectangle2
    • 说明
    • 代码

函数 rectangle2

说明

通过矩形中心点和角度,在图像上找到旋转矩形的四个角点

int rectangle2(Mat& src,vector& out_points, Point2f center, double angle, double w_length,double h_length, Scalar color, int thickness)
参数:
Mat& src 输入并输出图片
vector& out_points 得到四个点
Point2f center 矩形中心点
double angle 矩形角度
double w_length 矩形宽的一半
double h_length 矩形长的一半
Scalar color 颜色
int thickness 线宽 -1为填充**

代码

int rectangle2(Mat& src,vector<Point2f>& out_points, Point2f center, double angle, double w_length,double h_length, Scalar color, int thickness)Mat& src  输入并输出图片vector<Point2f>& out_points    得到四个点Point2f center   矩形中心点double angle     矩形角度double w_length  矩形宽的一半double h_length  矩形长的一半Scalar color     颜色int thickness    线宽     -1为填充**
int rectangle2(Mat& src,vector<Point2f>& out_points, Point2f center, double angle, double w_length,double h_length, Scalar color, int thickness)
{if (src.empty())return -1;angle = -angle;vector<Point2f> before_points(4),later_points(4);double cosA = cos(angle / (180.0 / CV_PI));double sinA = sin(angle / (180.0 / CV_PI));//左上,右上,右下,左下before_points[0] = Point(center.x - w_length, center.y - h_length);before_points[1] = Point(center.x + w_length, center.y - h_length);before_points[2] = Point(center.x + w_length, center.y + h_length);before_points[3] = Point(center.x - w_length, center.y + h_length);//带角度的矩形四角点later_points[0].x = (before_points[0].x - center.x) * cosA - (before_points[0].y - center.y) * sinA + center.x;later_points[0].y = (before_points[0].x - center.x) * sinA + (before_points[0].y - center.y) * cosA + center.y;later_points[1].x = (before_points[1].x - center.x) * cosA - (before_points[1].y - center.y) * sinA + center.x;later_points[1].y = (before_points[1].x - center.x) * sinA + (before_points[1].y - center.y) * cosA + center.y;later_points[2].x = (before_points[2].x - center.x) * cosA - (before_points[2].y - center.y) * sinA + center.x;later_points[2].y = (before_points[2].x - center.x) * sinA + (before_points[2].y - center.y) * cosA + center.y;later_points[3].x = (before_points[3].x - center.x) * cosA - (before_points[3].y - center.y) * sinA + center.x;later_points[3].y = (before_points[3].x - center.x) * sinA + (before_points[3].y - center.y) * cosA + center.y;int thicknes = thickness;if (thickness == -1)thicknes = 1;line(src, later_points[0], later_points[1], color, thicknes);line(src, later_points[1], later_points[2], color, thicknes);line(src, later_points[2], later_points[3], color, thicknes);line(src, later_points[3], later_points[0], color, thicknes);out_points = later_points;if (thickness == -1){Mat mask = Mat::zeros(src.size(), CV_8U);line(mask, later_points[0], later_points[1], Scalar(255), thicknes);line(mask, later_points[1], later_points[2], Scalar(255), thicknes);line(mask, later_points[2], later_points[3], Scalar(255), thicknes);line(mask, later_points[3], later_points[0], Scalar(255), thicknes);vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(mask, contours, hierarchy, RETR_TREE, CHAIN_APPROX_NONE);drawContours(src, contours, 0, color, -1);}return 0;
}

【 C++ OpenCV画旋转矩形 并返回四个顶点 】相关推荐

  1. 【opencv】 旋转矩形

    文章目录 1. 旋转矩形 2. 结果 1. 旋转矩形 //构建一个Mat(200*200) Mat image(200, 200, CV_8UC3, Scalar(0)); //设置一个旋转矩形3个参 ...

  2. opencv rect画旋转矩形_在opencv c中绘制旋转的矩形

    既然你想要一个填充的矩形,你应该使用fillConvexPoly: // Include center point of your rectangle, size of your rectangle ...

  3. opencv画火车沿轨道运行-课程作业

    opencv画火车沿轨道运行-课程作业 四个函数,一个循环 一. 轨道函数 二.定义可转弯小车的方法 三.定义角度函数 四.定义约束项 五.一个循环 以下附上总代码 以下效果图 写本次博客的目的主要是 ...

  4. [CV] Rotated IoU 计算旋转矩形之间的重叠面积

    [CV] Rotated IoU 计算旋转矩形之间的重叠面积 文章目录 [CV] Rotated IoU 计算旋转矩形之间的重叠面积 简介 旋转包围盒的编码方式 矢量的旋转公式 包围盒转化为角点 代码 ...

  5. 【opencv】轮廓特征(质心,面积,周长,近似轮廓,凸包,凸度,边界矩形,直角矩形,旋转矩形,最小闭合圈,拟合椭圆、直线)

    4_9_2_轮廓特征 - OpenCV中文官方文档 找到轮廓的不同特征,例如面积,周长,质心,边界框等. 1. 特征矩 特征矩可以帮助您计算一些特征,例如物体的质心,物体的面积等.请查看特征矩上的维基 ...

  6. opencv画直线,矩形

    opencv 画直线要画一条线,你只需要告诉函数这条线的起点和终点.我们下面会画一条从左上方到右下角的蓝色线段. import numpy as np import cv2# Create a bla ...

  7. OpenCV旋转矩形RotatedRect的Points函数遇到的问题

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2722字,预计阅读8分钟 前言 原来的文章<C++ OpenCV透视变换改进---直线拟合的应用>,通过Rotat ...

  8. python识别图像中绿色的部分_[OpenCV-Python] OpenCV 中的图像处理 部分 IV (四)

    部分 IV OpenCV 中的图像处理 21 OpenCV 中的轮廓 21.1 初识轮廓 目标 • 理解什么是轮廓 • 学习找轮廓,绘制轮廓等 • 函数:cv2.findContours(),cv2. ...

  9. python opencv最小外接矩形_Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  10. 使用opencv截取旋转框目标

    使用opencv截取旋转框目标 1.第一种方法 2.第二种方法 3.两种方法的简单对比 4.opencv 最小面积矩形返回角度的理解 4.1.version4.2之前 4.2.version4.2之后 ...

最新文章

  1. 你有哪些deep learning(rnn、cnn)调参的经验?
  2. Flutter入门进阶之旅(九)StatelessWidget StatefullWidget
  3. 常见文件、目录、路径操作函数
  4. linux中下载文件的命令
  5. 汇编语言中可以定义变量吗?怎么定义?有局部变量和全局变量之分吗?作用域是什么?
  6. SweetAlert详解
  7. python循环顶帖_python中的循环
  8. Go、Java、C++,下一代测序工具开发谁更强?
  9. 高通平台printk输出log到串口
  10. 博文视点Open Party ——漏洞分析
  11. ShenNiu.MVC管理系统
  12. WebService 服务 转
  13. php动态万年历模块,php如何实现万年历的开发(每日一课真是非常有效率)
  14. HanLP Demo(学习笔记)
  15. java weka 分类_Weka开发[48]——用Weka文本分类
  16. 360前端校招2019笔试编程题
  17. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccc
  18. Web前端之HTML超文本标记语言
  19. 排序算法 快速排序【详细步骤图解】
  20. K-means聚类、KNN算法原理

热门文章

  1. 魔兽争霸无法在这个计算机,win10系统魔兽争霸按F1无法选中自己的英雄的图文办法...
  2. 99,36岁老码农现身说法
  3. 计算机职业规划论文参考文献,职业生涯规划的参考文献
  4. 人工智能成热门 苹果谷歌等科技公司竞相涌入改变神经科学研究
  5. LabVIEW视觉功能模块下载
  6. 计算机作文英语初中,初中英语常见的作文类型及应对技巧
  7. 保研面试-中英文问题及回答总结
  8. 什么是“海恩法则”?
  9. 刑法285条非法获取计算机信息数据,刑法285条量刑标准,提供侵入计算机系统工具罪,并被拘役...
  10. 似幻亦真 教你踏足网络仿真的云外之境