为什么不呢。假设你有一个角度,那么你可以画出两条垂直的线。计算每个点到每条线的距离,然后计算最大距离和最小距离之差,你就能得到宽度和高度。
我的母语是中文
,而且我不擅长英语写作。所以我把它转化成了代码:
#!/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))
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
,晚安。
getRotationMatrix2D
函数。 - ldgormanmax_dist - min_dict
,你就能得到宽和高。 - Kinght 金