zoukankan      html  css  js  c++  java
  • 突发脑洞之基于python的四边形顶点集逆时针/顺时针排序

    首先声明以下方法为原创,用自己的数据验证了一下尚未出现问题,如有读者发现问题欢迎在下面评论区留言指正,非常感激~~

    前言

          项目中需要对畸变图像进行透视矫正,即用opencv自带函数warpPerspective(p1,p2),p1是原图像中四边形的顶点坐标集(逆时针/顺时针),p2是目标矫正后的顶点坐标集;然后p1我是用opencv中goodFeaturesToTrack函数得到的(因为我们原图中的前景目标存在多边形的情况,我用的低精度多边形拟合方法拟合的四边形,角点检测也是低精度的),得到的四边形角点坐标集发现是乱序的,必须调整到顺时针或者逆时针顺序。

    正文:

                 乍一想似乎很简单,但是本人太懒,不想做过多的计算(例如求原点距离、正余弦等),然后网上查了一下资料,好多例子代码也挺复杂的,有兴趣可参考下。

                 网上的检索来的资料:比如   https://blog.csdn.net/xjjatdna/article/details/86102157       https://www.it1352.com/1599460.html

                太复杂,看不下去o(╥﹏╥)o........我希望尽量用python自带的函数求解,然后计算简单,下面看下我的思路,有一种做小学奥数题的赶脚:

    画个图玩玩吧,坐标轴如图所示......假设四边形坐标点集分别为:A B C D  ,分别向X轴和Y轴做投影排序,说人话就是分别按X坐标、Y坐标排序:

    X方向排序:   C       A      B       D

    Y方向排序:   B       A      D       C

    排序之后的点集分成左边黄色框、红色框一组,然后分别求得两组点集坐标中重复的点:A 和  D分别就是左上角和右下角的2个点;

    剩下:

    X方向:C  B   四点坐标逆时针A——C-------D———B

    Y方向:B C  四点坐标顺时针A-------B———D———C

    以上的思路写起代码来就非常方便了,话不多说,上干货:

     

     

    以上方法仅针对四边形顶点点集排序,且适用于所有凸四边形。

    欢迎大家批评指正,有更好的方法欢迎留言,非常感谢~~

     

  • 相关阅读:
    排序算法——快速排序
    ArrayDeque源码解析
    PriorityQueue源码解析
    HashMap源码解析
    LinkedList源码解析
    ArrayList源码解析
    获取Spring容器管理的Bean工具类
    使用Google zxing生成二维码
    解决:SpringCloud中Feign支持GET请求POJO传参
    MySQL8.0 Unable to load authentication plugin 'caching_sha2_password'
  • 原文地址:https://www.cnblogs.com/zzc-Andy/p/14187780.html
Copyright © 2011-2022 走看看