【OpenCV 4开发详解】图像透视变换

  • Post author:
  • Post category:其他




本文首发于

“小白学视觉”

微信公众号,欢迎关注公众号


本文作者为小白,版权归

人民邮电出版社

发行所有,禁止转载,侵权必究!


经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

本小节将介绍图像的另一种变换——透视变换。透视变换是按照物体成像投影规律进行变换,即将物体重新投影到新的成像平面,示意图如图3-24所示。透视变换常用于机器人视觉导航研究中,由于相机视场与地面存在倾斜角使得物体成像产生畸变,通常通过透视变换实现对物体图像的校正。透视变换中,透视前的图像和透视后的图像之间的变换关系可以用一个3×3的矩阵变换矩阵表示,该矩阵可以通过两张图像中四个对应点的坐标求取,因此透视变换又称作“四点变换”。与仿射变换一样,OpenCV 4中提供了根据四个对应点求取变换矩阵的getPerspectiveTransform()函数和进行透视变换的warpPerspective()函数,接下来将介绍这两个函数的使用方法,两个函数的函数原型在代码清单3-35和代码清单3-36中给出。





图3-24 透视变换原理示意图

/center>

代码清单3-35 getPerspectiveTransform()函数原型
1.	Mat cv::getPerspectiveTransform	(const Point2f  src[],
2.	                                       const Point2f 	dst[],
3.	                                       int  solveMethod = DECOMP_LU 
4.	                                       )
  • src[]:原图像中的四个像素坐标。
  • dst[]:目标图像中的四个像素坐标。
  • solveMethod:选择计算透视变换矩阵方法的标志,可以选择参数及含义在表3-6中给出。

该函数两个输入量都是存放浮点坐标的数组,在生成数组的时候像素点的输入顺序无关,但是需要注意像素点的对应关系,函数的返回值是一个3×3的变换矩阵。函数中最后一个参数是根据四个对应点坐标计算透视变换矩阵方法的选择标志,其可以选择的参数标志在表3-6中给出,默认情况下选择的是最佳主轴元素的高斯消元法DECOMP_LU。



表3-6 getPerspectiveTransform()函数计算方法标志

标志参数 简记 作用
DECOMP_LU 0 最佳主轴元素的高斯消元法
DECOMP_SVD 1 奇异值分解(SVD)方法
DECOMP_EIG 2 特征值分解法
DECOMP_CHOLESKY 3 Cholesky分解法
DECOMP_QR 4 QR分解法
DECOMP_NORMAL 16 使用正规方程公式,可以与前面的标志一起使用
代码清单3-36 warpPerspective()函数原型
1.	void cv::warpPerspective(InputArray  src,



版权声明:本文为qq_42722197原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。