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

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

     

     

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

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

     

  • 相关阅读:
    Leetcode 16.25 LRU缓存 哈希表与双向链表的组合
    Leetcode437 路径总和 III 双递归与前缀和
    leetcode 0404 二叉树检查平衡性 DFS
    Leetcode 1219 黄金矿工 暴力回溯
    Leetcode1218 最长定差子序列 哈希表优化DP
    Leetcode 91 解码方法
    Leetcode 129 求根到叶子节点数字之和 DFS优化
    Leetcode 125 验证回文串 双指针
    Docker安装Mysql记录
    vmware虚拟机---Liunx配置静态IP
  • 原文地址:https://www.cnblogs.com/zzc-Andy/p/14187780.html
Copyright © 2011-2022 走看看