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

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

更多推荐

scrapy框架--

Scrapy是一个用于爬取数据的Python框架。下面是Scrapy框架的基本操作步骤:安装Scrapy:首先,确保你已经安装好了Python和pip。然后,在命令行中运行以下命令安装Scrapy:pipinstallscrapy创建Scrapy项目:使用Scrapy提供的命令行工具创建一个新的Scrapy项目。在命令

Zabbix

Zabbix前言一、内网离线安装1.下载离线RPM包1.1配置国内镜像源1.2下载zabbix所需rpm包2.内网服务器安装zabbix2.1内网服务器环境准备2.2修改yum源2.3安装2.4配置数据库2.5配置zabbix_server.conf2.6配置php配置文件2.7启动服务3.配置zabbixweb界面3

Minitab Express for Mac(数据分析软件)附破解补丁 v1.5.0 支持M1

MinitabExpress是一款专为Mac用户设计的数据分析和统计软件。它提供了一套全面的工具和功能,用于分析数据、执行统计计算和生成可视化。下载:MinitabExpressforMac(数据分析软件)附破解补丁以下是MinitabExpressforMac的一些主要功能:1.数据导入和操作:MinitabExpr

Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)

文章目录ISE开发环境Vivado开发环境方式1:XDC文件约束方式2:生成选项配置ISE开发环境ISE开发环境,可在如下Bit流文件生成选项中配置。右键点击GenerateProgrammingFile,选择ProcessProperties,在弹出的窗口选择ConfigurationOptions->UnusedP

排序算法-插入排序

属性当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移直接插入排序的特性总结:1.元素集合越接近有序

redis的基础底层篇 zset的详解

一zset的作用以及结构1.1zset作用redis的zset是一个有序的集合,和普通集合set非常相似,是一个没有重复元素的字符串集合。常用作排行榜等功能,以用户id为value,关注时间或者分数作为score进行排序。1.2zset的底层结构1.zset是一个特别的数据结构,一方面它等价于Java的数据结构Map<

Layui快速入门之第十节 表单

目录一:基本用法二:输入框普通输入框输入框点缀前置和后置前缀和后缀动态点缀密码显隐内容清除自定义动态点缀点缀事件三:复选框默认风格标签风格开关风格复选框事件四:单选框普通单选框自定义标题模板单选框事件五:选择框普通选择框分组选择框搜索选择框选择框事件六:表单相关操作API属性渲染常规渲染定向渲染2.7+忽略渲染验证自定

理清SpringBoot CURD处理逻辑、顺序

💗wei_shuo的个人主页💫wei_shuo的学习社区🌐HelloWorld!理清SpringBootCURD处理逻辑、顺序Controller(控制器):控制器接收来自客户端的请求,并负责处理请求的路由和参数解析。控制器通常会调用相应的服务层方法来处理业务逻辑,并将结果返回给客户端。Service(服务层):

keepalived高可用学习 keepalived+nginx高可用负载均衡配置

文章目录Keepalived1、概述2、配置文件说明3、简洁版配置过程4、keepalived+lvs配置5、主lvs不可用可能性6、防止脑裂,解决方式7、keepalived的配置补充keepalived+nginx高可用配置nginx的负载均衡nginx遇到的问题之负载均衡后获取客户端IPnginx配置中upstr

Spring整合RabbitMQ

一、步骤生产者①创建生产者工程②添加依赖③配置整合④编写代码发送消息消费者①创建消费者工程②添加依赖③配置整合④编写消息监听器二、代码生产者工程1.在生产者工程和消费者工程中都导入如下依赖<dependencies><dependency><groupId>org.springframework</groupId><a

单片机C语言实例:32、实用密码锁

程序实例1:延时函数#ifndef__DELAY_H__#define__DELAY_H__/*------------------------------------------------uS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~25

热文推荐