• opencv 轮廓顶点重新排序----四边形


    def reorder(myPoints):
        # print(myPoints.shape)
        # 创建一个与myPoints具有相同形状和类型的数组
        myPointsNew = np.zeros_like(myPoints)
        # 数组重塑为一个4行2列的数组
        myPoints = myPoints.reshape((4,2))
        # 计算myPoints数组中每一行(即每个点)的坐标和
        add = myPoints.sum(1)
        # 找出和最小的点(左上角点),将其设置为新数组的第一个点
        myPointsNew[0] = myPoints[np.argmin(add)]
        # 找出和最大的点(右下角点),将其设置为新数组的第四个点。
        myPointsNew[3] = myPoints[np.argmax(add)]
        # 计算每一行(每个点)的坐标之间的差异,得到一个4x1的数组。
        diff = np.diff(myPoints,axis=1)
        # 找到差异最小的点(做下角点),将其设置为新数组的第二个点。
        myPointsNew[1] = myPoints[np.argmin(diff)]
        # 找到差异最大的点(右下角点),将其设置为新数组的第三个点。
        myPointsNew[2] = myPoints[np.argmax(diff)]
        return myPointsNew
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    这个函数的操作步骤如下:
    创建一个与输入数组 myPoints 具有相同形状的空数组 myPointsNew,用于存储重新排列后的角点。
    将输入的 myPoints 数组重新排列为一个 4x2 的数组,其中每一行包含一个点的x和y坐标。
    计算每个点的x和y坐标之和,以确定左上角和右下角的点。add数组包含了这些和值。
    通过找到和最小的点和和最大的点来确定左上角和右下角的点。
    计算每个点的x和y坐标之差,以确定左下角和右上角的点。diff 数组包含了这些差值。
    通过找到差值最小的点和差值最大的点来确定左下角和右上角的点。
    最终,函数返回一个包含重新排列后的四个角点的数组 myPointsNew,这样你就可以使用这些点来进行后续的操作,如透视变换

  • 相关阅读:
    (LinkedList与链表) 和 (ArrayList与顺序表)的区别
    数据结构——排序算法——归并排序
    动态库加载【Linux】
    物联网AI MicroPython传感器学习 之 GC7219点阵屏驱动模块
    概率论期末复习
    汽车CAN/ CAN FD数据记录仪在上汽大通诊断测试部门的应用
    ESXI配置免密登录
    适用于STM32的U8G2回调函数例程
    Unity6 向量的概念和计算、预制体变体
    代码diff服务改进方案
  • 原文地址:https://blog.csdn.net/Johnor/article/details/132890850