基于OpenCV的透视变换

基础概念

透视变换(Perspective Transformation)是仿射变换的一种非线性扩展,是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。

原理:将二维的图片投影到一个三维视平面上,然后再转换到二维坐标下,所以也称为投影映射(Projective Mapping)。

相对仿射变换来说,改变了直线之间的平行关系

透视变换的特点和方法

透视变换相比仿射变换更加灵活,变换后会产生一个新的四边形,但不一定是平行四边形,需要非共线的四个点才能唯一确定

变换后原图中的直线变换后依然是直线

四边形包括了所有的平行四边形,所以透视变换包括了所有的仿射变换

openCV中实现透视变换方法:

首先根据变换前后的四个点用cv.getPerspectiveTransform()生成3×3的变换矩阵

再用cv2.warpPerspective()进行透视变换

函数cv2.warpPerspective()

格式:cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])

src: 输入图像

M:大小为3×3的转换矩阵

其他参数含义与cv2.warpAffine()函数中的一致

函数cv2.getPerspectiveTransform()

格式:M=cv2.getPerspectiveTransform(src,dst)

src:原图像中4个点的坐标

dst:原图像中4个点在转换后的目标图像中的对应坐标

 应用案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327813.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2807.在链表中插入最大公约数

【LetMeFly】2807.在链表中插入最大公约数 力扣题目链接:https://leetcode.cn/problems/insert-greatest-common-divisors-in-linked-list/ 给你一个链表的头 head ,每个结点包含一个整数值。 在相邻结点之间,请你插入一个新的结点&#x…

使用 C# Winfrom编写倒计时功能

在日常生活中,我们经常需要倒计时来提醒自己重要的时间节点,比如倒计时到达一个特定的日期和时间。介绍一个使用 C# 编写的倒计时应用程序的实现。 步骤一:应用程序的功能 它具有以下几个主要特点: 用户输入目标日期和时间&…

CSS3 边框border、outline、box-shadow

1 border 语法:border: width style color 2 outline 语法:outline: width style color 2.1 outline-offet MDN解释:用于设置outline与一个元素边缘或边框之间的间隙 即:设置outline相对border外边缘的偏移,可以为…

excel统计分析——两因素有重复方差分析

参考资料:生物统计学 无重复观测值的两因素方差分析只能研究两个因素的主效应,不能考察因素间的交互作用,只有在确定因素间不存在交互作用时才能进行无重复观测值的试验和分析。为了准确估计因素的主效应、交互作用和随机误差,每个…

DQL命令查询数据 (二)

本课目标 掌握 ORDER BY 子句 使用 LIMIT 子句实现分页查询 掌握MySQL的分组查询 掌握MySQL的子查询 SELECT 语法 ORDER BY 排序 ORDER BY 子句:按照一定顺序显示查询结果 排序可以是升序(ASC)或者是降序(DESC)&…

使用C#发送邮箱验证码

使用C#发送邮箱验证码 在很多应用程序中,我们需要使用邮箱来进行用户身份验证。其中一种常见的方式是通过发送验证码到用户的邮箱,然后要求用户输入该验证码进行验证。本文将介绍如何使用 C# 发送邮箱验证码。 声明 验证码登录没有用任何的工具&#…

【大数据】Zookeeper 数据写入与分布式锁

Zookeeper 数据写入与分布式锁 1.数据是怎么写入的2.基于 Zookeeper 实现分布式锁 1.数据是怎么写入的 无论是 Zookeeper 自带的客户端 zkCli.sh,还是使用 Python(或者其它语言)实现的客户端,本质上都是连接至集群,然…

记事本在手机桌面上怎么找?手机里的记事本怎么找?

在日常生活、工作和学习中,我们时常需要随手记录一些重要的事项、灵感闪现的瞬间或者是待办的任务。比如,在超市购物前,列出购物清单;在开会时,记下重要的讨论点;在学习时,捕捉那一刹那的灵感。…

C语言-第十八周做题总结-数组3

id:454 A.字符串逆序 题目描述 输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。 输入 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 输出 在一行中输出逆序后的字符串。 输入样例 输出样例 题解 先用一个while…

【大数据进阶第三阶段之Hive学习笔记】Hive基础入门

目录 1、什么是Hive 2、Hive的优缺点 2.1、 优点 2.2、 缺点 2.2.1、Hive的HQL表达能力有限 2.2.2、Hive的效率比较低 3、Hive架构原理 3.1、用户接口:Client 3.2、元数据:Metastore 3.3、Hadoop 3.4、驱动器:Driver Hive运行机制…

2.3_6 用信号量实现进程互斥、同步、前驱关系

2.3_6 用信号量实现进程互斥、同步、前驱关系 #mermaid-svg-fj0wp6tJGfadcT8h {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fj0wp6tJGfadcT8h .error-icon{fill:#552222;}#mermaid-svg-fj0wp6tJGfadcT8h .error-t…

在Ubuntu22.04上离线部署Tailchat(一)

一:Tailchat介绍 Tailchat 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。前端微内核架构 后端微服务架构 使得 Tailchat 能够驾驭任何定制化/私有化的场景,是面向企业与私域用户打造,高度自由的群组管理与定制化…