四边形的最小外接矩形
可以利用OpenCV
中的minAreaRect
函数获取任意多边形(或者任意点集)的最小外接矩形。
np.random.seed(70)
pts = np.random.randint(0,100,(4,2))
clock_points = order_points(pts)
rect = cv2.minAreaRect(clock_points)
# 将((cx,cy),(w,h),angle)格式表示的多边形数据转成点集表示
rect_pts = cv2.boxPoints(rect).astype(np.int32)
img = np.ones((100,100,3)).astype(np.uint8) * 255
cv2.polylines(img,[clock_points],True,(255,0,0),2)
cv2.polylines(img,[rect_pts],True,(0,0,255),1)
plt.imshow(img)
得到如下图形:
关于两个函数的规则如下,下面是笔者总结,并未找到官网文档中的详细解释,如有错误,望读者告知。
minAreaRect()
规则
- 格式为
((cx,cy),(w,h),angle)
; -
angle
旋转角度在[-90,0]
范围内,即为将矩形顺时针旋转到水平位置所需的最小角度; -
w
和h
为旋转到水平位置之后的宽(水平方向)和高(竖直方向)。
boxPoints()
规则
- 点排列为顺时针顺序,第一个点即为矩形旋转
angle
的基准点; -
angle
为顺时针旋转角度,即第一点和第四点连成的线段与x
轴正方向之间的夹角的相反数。