将四边形的四个角点重新排序

目录

1. 排序后从左下角开始顺时针存储

1.1 python

2. 排序后从左上角开始顺时针存储

2.1 python


处理文本检测数据时,遇到icdar2015数据集标注的顶点排序混乱问题,需要重新排序。确保排序后的顶点是:左上角开始,顺序存储。

1. 排序后从左下角开始顺时针存储

思路:安装x值顺序排序,分为两组,前两个是left,后两个是right. 然后left按y值逆序排序,right顺序排序。

1.1 python

def order_points_ld(pts):
    """
    左下角开始
    sort rectangle points by clockwise
    """
    sort_x = pts[np.argsort(pts[:, 0]), :]  # 按x方向进行一次排序后分为两组顶点,.后两个为一组Right。

    Left = sort_x[:2, :]
    Right = sort_x[2:, :]
    # Left sort
    Left = Left[np.argsort(Left[:, 1])[::-1], :]  # 左边y值是逆序排序([::-1]), 因为是左下角开始存储。
    # Right sort
    Right = Right[np.argsort(Right[:, 1]), :]

    return np.concatenate((Left, Right), axis=0)


if __name__ == '__main__':
    pts = np.array([[332, 374], [313, 370], [313, 270], [332, 174]])
    order_points_lu(pts)

 

2. 排序后从左上角开始顺时针存储

思路:安装y值顺序排序,分为两组,前两个是up,后两个是down. 然后up按x值顺序排序,down逆序排序。

2.1 python

def order_points_lu(pts):
    """
    左上角开始
    sort rectangle points by clockwise
    """
    sort_y = pts[np.argsort(pts[:, 1]), :]  # 按y方向进行一次排序后分为两组顶点,前两个为一组Up,后两个为一组Down。

    up = sort_y[:2, :]
    down = sort_y[2:, :]
    # up sort
    up = up[np.argsort(up[:, 0]), :]  # 上边x值是顺序排序([::-1]), 因为是从左上角开始存储。
    # down sort
    down = down[np.argsort(down[:, 0])[::-1], :]

if __name__ == '__main__':
    pts = np.array([[332, 374], [313, 370], [313, 270], [332, 174]])
    order_points_lu(pts)

 效果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值