突发脑洞之基于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

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

 

 

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

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

 

原文地址:https://www.cnblogs.com/zzc-Andy/p/14187780.html