OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解

☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░

一、getPerspectiveTransform 函数

getPerspectiveTransform函数根据源图像和目标图像上的四对点坐标来计算从原图像透视变换到目标头像的透视变换矩阵。

1.1、调用语法

getPerspectiveTransform(src, dst, solveMethod=None)

1.2、语法说明

  • src:源图像上四个点的坐标构成的矩阵,要求其中任意三点不共线
  • dst:目标图像上四个点的坐标构成的矩阵,要求其中任意三个点不共线,且每个点与src的对应点对应
  • solveMethod:矩阵分解方法,传递给cv2.solve(DecompTypes) 求解线性方程组或解决最小二乘问题,默认值为None,表示使用DECOMP_LU。
    solveMethod对应取值及含义如下
    在这里插入图片描述
    注:矩阵分解 ,英文称为matrix decomposition或matrix factorization是将矩阵拆解为数个矩阵的乘积,可分为三角分解、满秩分解、Jordan分解和SVD(奇异值)分解等,常见的有三种:1)三角分解法 (Triangular Factorization),2)QR 分解法 (QR Factorization),3)奇异值分解法 (Singular Value Decompostion)。 在图像处理方面,矩阵分解被广泛用于降维(压缩)、去噪、特征提取、数字水印等,是十分重要的数学工具,其中特征分解(谱分解)和奇异值分解是两种常用方法。


    老猿对矩阵分解目前也只知道概念,参阅资料《浅谈矩阵分解以及应用》,相关具体知识并不熟悉,对此有兴趣的可以进一步查阅相关资料。
  • 返回值:为一3*3的透视变换矩阵

二、warpPerspective 函数

warpPerspective函数用于对输入图像进行透视变换,透视变换使用如下公式来计算结果图像和输入图像的对应关系:
在这里插入图片描述
其中Mij代表透视变换矩阵的9个元素。

2.1、调用语法

warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)

2.2、语法说明

  • src:输入图像矩阵
  • M:3*3的透视变换矩阵,可以通过getPerspectiveTransform等函数获取
  • dsize:结果图像大小,为宽和高的二元组
  • dst:输出结果图像,可以省略,结果图像会作为函数处理结果输出
  • flags:可选参数,插值方法的组合(int 类型),默认值 INTER_LINEAR,本函数官方材料说明取值为INTER_LINEAR 或 INTER_NEAREST与 WARP_INVERSE_MAP的组合,但老猿测试其他标志也是支持的,具体取值及含义请参考《https://blog.csdn.net/LaoYuanPython/article/details/111771138 OpenCV-Python图像处理:插值方法及使用resize函数进行图像缩放》的介绍
  • borderMode:可选参数,边界像素模式(int 类型),默认值 BORDER_CONSTANT,本函数官方材料说明取值为BORDER_CONSTANT 或 BORDER_REPLICATE,实际上所有取值类型都支持,包括形态变换中不支持的BORDER_WRAP、BORDER_TRANSPARENT都能支持,并且不同取值有不同效果,具体取值及含义请参考《https://blog.csdn.net/LaoYuanPython/article/details/109441709 OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍》的介绍
  • borderValue:可选参数,边界填充值,当borderMode为cv2.BORDER_CONSTANT时使用,默认值为None;
  • 返回值:为透视变换后的结果图像矩阵,最后的结果矩阵每个像素与原图像像素的对应关系为:
    在这里插入图片描述

如果flags标记设置了WARP_INVERSE_MAP标记,首先使用invertAffineTransform对变换矩阵进行反转即求其逆矩阵,然后将其放入上面的公式中,而不是将M直接放入

  • 返回值:透视变换后的结果图像

三、小结

本文详细介绍了OpenCV-Python相关的透视变换处理函数getPerspectiveTransform 和warpPerspective的语法及参数含义。

更多透视变换概念、原理及案例的介绍请参考《https://blog.csdn.net/LaoYuanPython/article/details/114003964 OpenCV-Python图像处理:透视变换概念、矩阵及实现案例详解》的介绍。

要理解投影变换的原理最好能理解仿射变换的原理,关于仿射变换可参考老猿的仿射变换相关系列博文。

仿射变换博文传送门(带星号的为付费专栏文章):
  1. *图像仿射变换原理1:齐次坐标来龙去脉详解
  2. *图像仿射变换原理2:矩阵变换、线性变换和图像线性变换矩阵
  3. *图像仿射变换原理3:仿射变换类型及变换矩阵详解
  4. *图像仿射变换原理4:组合变换及对应变换矩阵
  5. *图像仿射变换原理5:组合变换矩阵的OpenCV-Python实现
  6. OpenCV-Python图像处理:仿射变换详解及案例
  7. OpenCV-Python仿射变换开发中遇到的坑
  8. openCV仿射变换:getAffineTransform的案例
  9. 为什么称图像旋转、错切、缩放变换是线性变换?
  10. 图像仿射变换:绕点旋转和指定直线依赖轴shear错切变换矩阵
  11. 图像仿射变换shear怎么翻译?剪切、错切、推移哪个译词好?
  12. 仿射变换原理和其OpenCV-Python实现知识汇总

更多图像处理的介绍请参考专栏《OpenCV-Python图形图像处理 https://blog.csdn.net/laoyuanpython/category_9979286.html》和《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》相关文章。

更多图像处理的数学基础知识请参考专栏《人工智能数学基础 https://blog.csdn.net/laoyuanpython/category_10382948.html》

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

如果对文章内容存在疑问,可以在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

你可能感兴趣的:(老猿Python,python,opencv,透视变换,投影变换,编程语言)