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

python 复制代码
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

这个函数的操作步骤如下:

创建一个与输入数组 myPoints 具有相同形状的空数组 myPointsNew,用于存储重新排列后的角点。

将输入的 myPoints 数组重新排列为一个 4x2 的数组,其中每一行包含一个点的x和y坐标。

计算每个点的x和y坐标之和,以确定左上角和右下角的点。add数组包含了这些和值。

通过找到和最小的点和和最大的点来确定左上角和右下角的点。

计算每个点的x和y坐标之差,以确定左下角和右上角的点。diff 数组包含了这些差值。

通过找到差值最小的点和差值最大的点来确定左下角和右上角的点。

最终,函数返回一个包含重新排列后的四个角点的数组 myPointsNew,这样你就可以使用这些点来进行后续的操作,如透视变换。

相关推荐
亿牛云爬虫专家2 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
蹦蹦跳跳真可爱5896 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij7 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien7 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
敲键盘的小夜猫7 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_12208 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
胖达不服输9 小时前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩9 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩10 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm
叶 落10 小时前
计算阶梯电费
python·python 基础·python 入门