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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机小混子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值