cv.minAreaRect(), cv.boxPoints(), cv.boundingRect()

最小外接旋转矩形,最小外接正矩形的概念

在这里插入图片描述

cv.minAreaRect()—求最小外接旋转矩形的center_x,center_y,w, h,angle

输入参数:[[x1, y1], [x2, y2], [x3, y3], …[xn, yn]]---------------------点集
输出格式:rect = ((center_x, center_y), (w, h), angle)
输入参数是numpy格式,使用np.array()格式转换
angle格式角度制[0, 90], 会有 -0.0的角度(猜测可能是交换w,h引起的,-0.0也对应0度)。

输入

points1:
[[3979.3120584137123, 3079.8325319735786], [4037.171304326291, 3107.476393909589], [4016.308628316948, 3151.142459975655], [3958.4493824043693, 3123.4985980396445]]

points2:
[[4044.2180426308605, 3034.289607122802], [4084.5274604824476, 3086.5658833990783], [4039.064397419385, 3121.6217392549343], [3998.754979567798, 3069.345462978658]]

输出:
在这里插入图片描述

cv.boxPoints()—求最小外接旋转矩形的四个顶点

输入参数:rect = ((center_x, center_y), (w, h), angle)
输出格式:box = ((x1, y1), (x2,y2), (x3, y3), (x4, y4))
center_x, center_y, w, h均为整型。angle格式角度制,opencv的角度angle是根据w算的:一般角度取[-180, 180]之间, 顺时针角度为正,逆时针角度为负。角度关系:α - β = 180 ,如下图所示:
在这里插入图片描述

比如:rect = ((center_x, center_y), (w, h), angle) = ((3997, 3115), (64, 48), 26)
angle为26度可以解释为:以长边64(w)顺时针来算角度为26度
把26度换成逆时针角度为26-180 = -154°
((3997, 3115), (64, 48), 26) 和 ((3997, 3115), (64, 48),-154) 得到的box是一样的。只是四个点的顺序变了。顺时针角度的坐标顺序:左下,左上,右上,右下。逆时针角度的坐标顺序:右上,右下,左下,左上。运行结果:
tupian1
将64和48换一下位置:此时正确的顺时针角度为:26+90=116°, 逆时针角度为:-156 + 90 = -66°
((3997, 3115), (48, 64), 116)和((3997, 3115), (48, 64), -66)结果一致。运行结果:

在这里插入图片描述
注意这里只是在说opencv的角度关系。如果选择了自己的标签表示方法,角度区间可以自己定义。
如长边表示法: center_x, center_y, long_w, short_h, angle ,这里的角度可以自己决定选什么区间,一般选择顺时针角度[0,179)或者逆时针角度(-179,0]
如opencv表示法:center_x, center_y, w, h, angle ,这里w和h谁都可以为长边(依据角度换w,h的位置),以w位置的边为计算角度的基准。一般取逆时针角度[-90,0)或者顺时针角度(0,90]。

cv.boundingRect()—求最小外接正矩形的左上坐标x,y,矩形的w,h

输入参数:[[x1, y1], [x2, y2], [x3, y3], …[xn, yn]]----------------------- 点集
输出格式:(left_up_x, left_up_y, w, h)

输入参数是numpy格式,使用np.array()格式转换

输入:

[[3958 3123]
[3979 3079]
[4037 3107]
[4016 3151]]

输出:
在这里插入图片描述

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值