gpt4 book ai didi

python - 在 OpenCv 中以给定角度测量轮廓宽度

转载 作者:太空宇宙 更新时间:2023-11-03 21:25:03 24 4
gpt4 key购买 nike

给定 OpenCV 中的轮廓,我可以使用 cv2.boundingRect(contour) 提取宽度和高度。这将返回边界矩形的宽度和高度,如左图所示。

给定一个角度,是否可以提取旋转的边界矩形的宽度/高度,如右图所示?

Contour illustration

我想测量运动物体的长度,但我需要测量运动方向的长度,有时可能与水平线成 45 度角。

我知道有一种方法可以使用 cv2.minAreaRectcv2.boxPoints 来获得 旋转的边界矩形,但是旋转我need 并不总是匹配最小面积矩形,所以我需要能够以某种方式指定角度。

我只需要旋转的宽度和高度值,我真的不需要旋转的轮廓,如果这样更容易的话。

最佳答案

正如我的评论:为什么不呢。支持你有一个角度,然后你可以制作两条正交线。计算pts到每条线的距离,然后计算max_dist - min_dict,就可以得到宽高。

我的母语是中文,我擅长英文写作。所以我只是把它变成代码:

#!/usr/bin/python3
# 2017.12.13 22:50:16 CST
# 2017.12.14 00:13:41 CST
import numpy as np

def calcPointsWH(pts, theta=0):
# 计算离散点在特定角度的长宽
# Measuring width of points at given angle
th = theta * np.pi /180
e = np.array([[np.cos(th), np.sin(th)]]).T
es = np.array([
[np.cos(th), np.sin(th)],
[np.sin(th), np.cos(th)],
]).T
dists = np.dot(pts,es)
wh = dists.max(axis=0) - dists.min(axis=0)
print("==> theta: {}\n{}".format(theta, wh))

将这颗钻石用于测试:

enter image description here

pts = np.array([[100, 200],[200,  26],[300, 200],[200, 373]], np.int32)
for theta in range(0,91, 30):
calcPointsWH(pts, theta)


==> theta: 0
[ 200. 347.]
==> theta: 30
[ 173.60254038 300.51081511]
==> theta: 60
[ 300.51081511 173.60254038]
==> theta: 90
[ 347. 200.]

现在是2017.12.14 00:20:55 CST,晚安。

关于python - 在 OpenCv 中以给定角度测量轮廓宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47795163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com