cv2.minAreaRect最小外接矩形

opencv中的cv2.minAreaRect函数官方文档如上,没有具体的定义。

这里做一下介绍:

输入:numpy array

输出: ( center (x,y), (width, height), angle of rotation ).即((矩形中心x坐标,矩形中心y坐标),(宽,高),角度)

其中矩形中心x,y坐标很好理解,宽、高和角度则不固定,以下面代码为例:

import cv2
import numpy as np

print(cv2.__version__)
img = np.zeros([1200,1200,3], dtype="uint8")
points = [[589,268], [512,528], [702,534], [740,413]]
# points = [[600,361], [900,570], [800,580], [750,408], [700,100]]
for point in points:
    cv2.circle(img, point, 7, (0,0,255), -1)

minRect = cv2.minAreaRect(np.array(points))
box = cv2.boxPoints(minRect).astype('int32')
print(minRect, '\n', box.tolist())
cv2.line(img, (200,box[-1][1]), (1000,box[-1][1]), (255,255,255), 2)
cv2.polylines(img, [box], isClosed=True, color=(0,255,255), thickness=2)
cv2.imwrite('E:\\code\\others\\img.png', img)

输出结果为:

4.6.0
((639.65185546875, 424.4026794433594), (185.958740234375, 271.1623229980469), 16.496856689453125) 
 [[511, 528], [588, 268], [767, 320], [690, 580]]

注意,我的opencv版本为4.6.0,上图种的θ角和四个顶点为人为添加。

此时,x轴顺时针旋转最先重合的边为w=185.958740234375, 则h=271.1623229980469,angle为x轴顺时针旋转的角度=16.496856689453125,

cv2.boxPoints函数将旋转矩形框的输出转化为矩形框四个顶点,依次为xmin点,顺时针排列;也可理解为最后一个顶点为旋转角所在顶点,顺时针排列。

当输入points为另一场景时:

输出结果为:

4.6.0
((710.6478271484375, 373.02227783203125), (510.7837219238281, 194.21136474609375), 66.94869995117188) 
 [[521, 176], [700, 100], [900, 570], [721, 646]]

此时长边为w=510.7837219238281, h=194.21136474609375,角度θ=66.94869995117188

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值