透视变换
上篇讲到仿射变换,但是仿射变换不能矫正一些变形,如矩形区域的部分发生变化最终变成梯形,这时候矫正就需要用到透视变换。透视变换(Perspective Transformation),又称投影映射(Projective Mapping)、投射变换等,是三维空间上的非线性变换,可看作是仿射变换的更一般形式,简单讲即通过一个3x3的变换矩阵将原图投影到一个新的视平面(Viewing Plane),在视觉上的直观表现就是产生或消除了远近感。透视变换是将图像从一个视平面投影到另外一个视平面的过程。
密集透视变换
密集透视变换用的opencv函数与密集仿射变换是类似的,cv.warpPerspective与cv.warpAffine的参数相同,但是所采用的映射矩阵必须是3*3的。通常情况下提及的透视变换都是指密集透视变换。密集透视变换只局限于线性操作。
Python:
dst = cv.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]])
参数含义见warpAffine。
计算透视映射矩阵
对于透视变换函数,针对在代码执行期间填充M,可以通过函数cv.getPerspectiveTransform获得。注:与仿射变换不同的是需要4个点。
retval = cv.getPerspectiveTransform( src, dst[, solveMethod] )