透视

作者: 大龙10 | 来源:发表于2021-10-08 14:48 被阅读0次

《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05

第5章 几何变换

5.4 透视

1)定义

  仿射变换可以将矩形映射为任意平行四边形,透视变换则可以将任意四边形映射为矩形。

2)函数

  透视变换通过函数cv2.warpPerspective()实现,该函数的语法是:

dst = cv2.warpPerspective( src, M, dsize[, flags[, borderMode[, borderValue]]] )

式中:

  • dst代表透视处理后的输出图像,该图像和原始图像具有相同的类型。dsize决定输出图像的实际大小。
  • src代表要透视的图像。
  • M代表一个3×3的变换矩阵。
  • dsize代表输出图像的尺寸大小。
  • flags代表插值方法,默认为INTER_LINEAR。当该值为WARP_INVERSE_MAP时,意味着M是逆变换类型,能实现从目标图像dst到原始图像src的逆变换。具体可选值参见表5-1。
  • borderMode代表边类型,默认为BORDER_CONSTANT。当该值为BORDER_TRANSPARENT时,意味着目标图像内的值不做改变,这些值对应原始图像内的异常值。
  • borderValue代表边界值,默认是0。

3)转换矩阵

  与仿射变换一样,同样可以使用一个函数来生成函数cv2.warpPerspective()所使用的转换矩阵。该函数是cv2.getPerspectiveTransform(),其语法格式为:

retval=cv2.getPerspectiveTransform(src,dst)

式中:

  • src代表输入图像的四个顶点的坐标。
  • dst代表输出图像的四个顶点的坐标。

  需要注意的是,src参数和dst参数是包含四个点的数组,与仿射变换函数cv2.getAffineTransform()中的三个点是不同的。实际使用中,我们可以根据需要控制src中的四个点映射到dst中的四个点。

4)程序

【例5.8】设计程序,完成图像透视。

import cv2
import numpy as np
img=cv2.imread('demo.bmp')
rows,cols=img.shape[:2]
print(rows,cols)
pts1 = np.float32([[150,50],[400,50],[60,450],[310,450]])
pts2 = np.float32([[50,50],[rows-50,50],[50,cols-50],[rows-50,cols-50]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(cols,rows))
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

  指定原始图像中平行四边形的四个顶点pts1,指定目标图像中矩形的四个顶点pts2,使用M=cv2.getPerspectiveTransform(pts1, pts2)生成转换矩阵M。接下来,使用语句dst=cv2.warpPerspective(img, M, (cols, rows))完成从平行四边形到矩形的转换。

5) 运行结果

  运行程序,出现如图所示的运行结果。其中,左图是原始图像,是一个平行四边形(内含多个小平行四边形);右图是透视结果图像,是一个矩形(内含多个小矩形)。


相关文章

网友评论

      本文标题:透视

      本文链接:https://www.haomeiwen.com/subject/ljnpnltx.html