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

相关推荐
起个名字费劲死了19 分钟前
Halcon学习一:骰子识别
前端·python·学习
eric-sjq1 小时前
小思框架 · 30M 级长上下文新架构对比技术报告
人工智能·python·深度学习·语言模型
reasonsummer3 小时前
【办公类-04-05】20261030整理手机照片(华为手机助手导出照片到日期文件夹+批量添加四级文件夹+手动转移照片更名+更改三级文件夹合并汉字名称)
python·智能手机
zwc32104320553 小时前
Day 2:图像内存、数据类型与stride
c++·人工智能·opencv·算法·计算机视觉
BD_Marathon3 小时前
【Python】初识迭代器
python
gz927cool4 小时前
Python 全栈应用最佳实践完整指南
开发语言·python·ai
智购科技智能售货柜4 小时前
顾客已经关门,视觉售货柜还在处理旧画面:延迟积压怎么查?~YH
python·单片机·嵌入式硬件·物联网·eclipse
梯度下降者4 小时前
Python从0到100(三):Python中的变量介绍
python·作用域·变量·数据类型·计算机常识
誰能久伴不乏4 小时前
OpenCV 入门(二):像素访问、ROI 与深浅拷贝
人工智能·opencv·计算机视觉
AIFQuant4 小时前
Python期货行情API接入:股指、黄金、原油多品种数据管道实战
开发语言·python·金融·区块链·量化开发