作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
函数cv2.minAreaRect(cnt)是cv2.findContours()找轮廓函数返回轮廓数组后,绘制每个轮廓的最小外接矩形的方法。详解请看我的另两篇文章:
https://mp.csdn.net/mp_blog/creation/editor/119903415
https://mp.csdn.net/mp_blog/creation/editor/119892630
minAreaRect函数返回的是一个叫Box2D 结构,举一个输出的Box2D的例子:
((81.0,288),(22.0,10.0),-0.0);
其表示的意义是(中心点坐标,(宽度,高度),旋转的角度)
官方解释如下:
- center: The rectangle mass center.
- size: Width and height of the rectangle.
- angle: The rotation angle in a clockwise direction. When the angle is 0,90.180,270 etc, the rectangle becomes an up-right rectangle.
如上图的红色矩形框框起来的就是minAreaRect函数返回的Box2D结构元素,
那么如何取到最新外接矩形框(绿色)的四个顶点呢?
用cv2.boxPoints(rect)函数转换即可:
rect = cv2.minAreaRect(cnt) # 最小外接矩形
box = np.int0(cv2.boxPoints(rect)) # 矩形的四个角点取整
box就是上图中蓝色椭圆框框起来的几个顶点集合。
- 上述数组中索引0的点位置真心不一定在哪个位置(网上的说法有时候很坑),实测一下就知道了,我自己测试的出现在左上方和左下方,感觉和矩形角度有关系。
- 从索引0的顶点开始,顺时针方向,依次为1,2,3索引点。
- 索引0和索引3之间为矩形的width,索引0和索引1之间为矩形的height。
- 角度θ即是水平轴逆时针旋转到 索引0和索引3所在边 之间的夹角。
【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】