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,这样你就可以使用这些点来进行后续的操作,如透视变换。

相关推荐
qq_5024289906 分钟前
清华大学与微软亚洲研究院出品:Kronos 本地部署教程
数据结构·python·金融量化·kronos开源模型
2301_8148098611 分钟前
CSS Grid布局如何解决图片溢出网格单元_设置object-fit与网格尺寸.txt
jvm·数据库·python
m0_6784854522 分钟前
如何在Bootstrap中自定义Modal的弹出动画效果
jvm·数据库·python
m0_4939345330 分钟前
CSS如何禁止子元素浮动影响父级_设置父容器BFC属性
jvm·数据库·python
weixin_5860614633 分钟前
Golang怎么安装和配置开发环境_Golang环境搭建完整教程【总结】
jvm·数据库·python
Dxy123931021634 分钟前
Python在图片上画矩形:从简单边框到复杂标注的全攻略
开发语言·python
wltx168835 分钟前
谷歌SEO+外贸版GEO优化步骤?
人工智能·python
white-persist38 分钟前
【vulhub shiro 漏洞复现】vulhub shiro CVE-2016-4437 Shiro反序列化漏洞复现详细分析解释
运维·服务器·网络·python·算法·安全·web安全
m0_493934531 小时前
html标签怎么避免标签嵌套错误_div不能放在p内原因【详解】
jvm·数据库·python
꯭爿꯭巎꯭1 小时前
python下载手机版(python3手机版(免费))
开发语言·python·智能手机