Numpy:矩形框四个顶点顺时针排序

jupiter
2023-10-04 / 0 评论 / 42 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年10月04日,已超过231天没有更新,若内容或图片失效,请留言反馈。

问题说明

一个矩形有四个顶点,设计一个函数将其进行顺时针排序,并返回。

代码

主要的思路就是先对矩形的四个点,按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

评论 (0)

打卡
取消