python裁剪函数 用python对图像进行裁剪( 三 )


minAreaRect() 返回了所需区域的最小斜矩形的参数,与包围框直接返回四个顶点的坐标不同,最小外接矩形返回的是矩形的 ((x, y), (w, h), angle) ,对应了矩形的中心,宽度,高度和旋转角度 。
旋转角度 angle 是水平轴( x 轴)逆时针旋转,与碰到的矩形的第一条边的夹角 。并且这个边的边长是 width  , 另一条边边长是 height。也就是说,在这里 width 与 height 不是按照长短来定义的 。
在 OpenCV 中,坐标系原点在左上角 , 相对于 x 轴,逆时针旋转角度为负,顺时针旋转角度为正,所以函数 minAreaRect() 返回的角度范围时 [-90~0)。想象一个平放的长矩形,调用 minAreaRect()返回的角度为 -90 度 。如果我们旋转图像,直到矩形树立起来,这是调用 minAreaRect() 得到的角度依然是 -90 度 。
第一种裁剪旋转矩形的方法是通过仿射变换旋转图像的方式 。
仿射变换( Affine Transformation ) 是一种二维坐标到二维坐标之间的线性变换 , 保持二维图形的“平直性”( straightness ,即变换后直线还是直线不会打弯 , 圆弧还是圆?。┖汀捌叫行浴保?parallelness ,其实是指保二维图形间的相对位置关系不变,平行线还是平行线 , 相交直线的交角不变 。) 。
计算过程:
如果不做边长和角度的判断,则只会沿着 x 轴的顺时针方向做相同大小角度的旋转,不能保证旋转后的视角是正确的视角:
根据任务目标的类型,做边长和角度的判断并进行相应的调整,可以保证旋转后的视角是正确的视角:
第二种裁剪旋转矩形的方法是通过透视变换直接将旋转矩形的四个顶点映射到正矩形的四个顶点 。
透视变换( Perspective Transformation )是将图片投影到一个新的视平面( Viewing Plane ),也称作投影映射( Projective Mapping ) 。
计算过程:
以上两种方法都可以用来抠取旋转矩形的内容 。仿射变换方法需要预先对整张图进行旋转,通过观察旋转后的图像可以发现,有一部分图像被旋转出了图像边界,如果你要抠取的目标正好在图像边缘附近,那么很容易出界导致图像抠取的缺失 。同时我们需要对宽、高和角度做出动态的调整;透视变换的方法直接对抠取区域进行了映射 , 这种方法可以省略旋转的步骤 , 并且不会出现抠取内容的缺失 。同时我们只需要对4个顶点之间的映射关系做好定义即可,不需要考虑角度的问题 。相对的,透视变换相对于仿射变换计算量更大一些,不过这在 c++ 的底层实现上带来的时延差距小于 ms。
【python裁剪函数 用python对图像进行裁剪】python裁剪函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于用python对图像进行裁剪、python裁剪函数的信息别忘了在本站进行查找喔 。

推荐阅读