时间:2021-05-20
前言:最近在工程中需要用到截取RotatedRect中的图形,保存为Mat做后续处理。发现opencv文档中没有这个api,最开始想到的方案是将整张图片进行相应的旋转,然后再从中截取正矩形,但是我们要获取的是部分区域,将整张图片进行旋转会造成很多的资源浪费。所以需要自行实现一个旋转矩形的方案。
原理是利用向量空间变换,如图
通过
Point2f[] points=rotatedRect.Points();可获取RotatedRect四个端点的坐标。先选定一个点为输出Mat左上端点,这里采取的是离原图左上角最近的端点(即x2+y2最小)。然后再选取相邻的2个端点,作向量Vx及Vy。这里可以根据需求来选定Vx和Vy的方向,比如要求输出Mat的Width大于Height,那就选定长的一边为Vx。这里直接选定左上端点到顺时针方向的端点的向量为Vx,即如图所示。
在选定好Vx和Vy后,进行向量空间的变换。设在输出的Mat中任一一个坐标点(i,j),对应在输出Mat中的任一坐标点(x,y)。设左上端点坐标(x0,y0) (即图中点2),
满足:
设目标RotatedRect长宽为width height,有
然后做一个二重循环,将j从0循环到height,i从0循环到width,就可以得到输出Mat所有像素的信息。
下面为一个截取BGR类型的Mat的RotatedRect的代码
到此这篇关于C#使用opencv截取旋转矩形区域图像的文章就介绍到这了,更多相关C# opencv截取内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了opencv实现图像旋转效果的具体代码,供大家参考,具体内容如下图像旋转:在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩
本文实例为大家分享了OpenCV鼠标绘制截取矩形区域图像的具体代码,供大家参考,具体内容如下在opencv中利用鼠标绘制矩形,代码如下:#include#inc
本文实例为大家分享了pythonopencv实现旋转矩形框裁减的具体代码,供大家参考,具体内容如下经常遇见旋转矩形框的裁减问题,那么思路是,将矩形框旋转正然后再
翻转矩形区方法英文命令:InvertRect 操作系统支持:Windows所属对象:画板将画板上指定矩形区域的颜色翻转过来。语法:无返回值画板.翻转矩形区(矩形
本文实例讲述了c#图像截取的实现方法。分享给大家供大家参考。具体如下:图像截取的相关代码如下:复制代码代码如下:publicForm1(){Initialize