问题说明
一个矩形有四个顶点,设计一个函数将其进行顺时针排序,并返回。
代码
主要的思路就是先对矩形的四个点,按x
方向进行一次排序后分为两组顶点,前两个为一组Left
,后两个为一组Right
。然后对Left
进行排序,确保y值
大的在前面;对RIght
进行排序,确保y值
小的在前面。拼接Left与Right即满足要求。
返回顺序左下、左上、右上、右下
def order_points(pts):
''' sort rectangle points by clockwise '''
sort_x = pts[np.argsort(pts[:, 0]), :]
Left = sort_x[:2, :]
Right = sort_x[2:, :]
# Left sort
Left = Left[np.argsort(Left[:,1])[::-1], :]
# Right sort
Right = Right[np.argsort(Right[:,1]), :]
return np.concatenate((Left, Right), axis=0)
测试
img = np.zeros((512, 512, 3), dtype=np.uint8)
pts = np.array([[128,128],[256,256],[256,100],[128,256]], dtype=np.int32)
pts = order_points(pts)
print(pts)
结果
[[128 256]
[128 128]
[256 100]
[256 256]]
评论 (0)