OpenCV-Python仿射变换开发中遇到的坑

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

仿射变换博文传送门(带星号的为付费专栏文章):
  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仿射变换开发中遇到的坑

在使用OpenCV-Python开发仿射变换应用时,老猿遇到了一些坑,估计这些坑是很多初学者会遇到,在这儿总结一下,供大家借鉴参考:

一、坐标原点相关问题

OpenCV的图像窗口的坐标原点在左上角,在开发中需要注意:

  1. 旋转变换矩阵的旋转角度的正负值对应旋转方向
    当旋转变换矩阵为
    在这里插入图片描述
    其正值表示顺时针旋转,如果需要用正值表示逆时针旋转,则旋转矩阵需要变为:
    在这里插入图片描述

  2. 使用OpenCV的函数getRotationMatrix2D构建旋转矩阵时,逆时针旋转角度为正值

  3. 平移时的平移距离需要考虑坐标原点的位置在左上角。

二、WARP_INVERSE_MAP标记问题

该问题是因为OpenCV官方文档的材料说明存在问题导致,我们来看看官方描述:

OpenCV-Python仿射变换开发中遇到的坑_第1张图片

针对第一个红圈标记的说明,老猿在翻译时,将其理解为设置WARP_INVERSE_MAP标记时,计算值等于上面计算公式的值,如果不设置则会求逆矩阵。但实际上是没设置标记使用该公式,设置了先求逆矩阵再用逆矩阵参与运算

三、矩阵顺序问题

在组合仿射变换由应用构建多个变换矩阵相乘时,一定要记得最先进行的变换要在连乘变换矩阵的最右边。例如先平移、再旋转、再反平移,则平移矩阵在最右边,反平移矩阵在最左边。

四、旋转角度求三角函数值问题

三角函数使用时,角度的数值如30°不能直接作为三角函数的参数,而是要除以180乘以π的值作为参数。

五、仿射矩阵行数问题

warpAffine调用的参数M仿射矩阵是2*3的,但矩阵乘法不支持2*3的矩阵相乘,因此需要先用3*3的单应性矩阵相乘,最后结果取前2行作为仿射矩阵。

六、矩阵乘法

numpy的矩阵既可以支持两个矩阵直接相乘,如A*B,但这个相乘不是标准矩阵乘法,而是矩阵各相同位置元素直接相乘,在仿射矩阵乘法中需要用numpy的matmul或dot进行矩阵相乘,否则变换效果就不对。

七、小结

本文介绍了老猿在使用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》

写博不易,敬请支持:

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

关于老猿的付费专栏

  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 ░

你可能感兴趣的