美文网首页
复杂的仿射变换

复杂的仿射变换

作者: 大龙10 | 来源:发表于2021-10-07 15:50 被阅读0次

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

第5章 几何变换

5.3 仿射

5.3.3 更复杂的仿射变换

  对于更复杂仿射变换,OpenCV提供了函数cv2.getAffineTransform()来生成仿射函数cv2.warpAffine()所使用的转换矩阵M。该函数的语法格式为:

retval=cv2.getAffineTransform(src,dst)

式中:

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

  在该函数中,其参数值src和dst是包含三个二维数组(x, y)点的数组。
  上述参数通过函数cv2.getAffineTransform()定义了两个平行四边形。src和dst中的三个点分别对应平行四边形的左上角、右上角、左下角三个点。
  函数cv2.warpAffine()以函数cv2.getAffineTransform()获取的转换矩阵M为参数,将src中的点仿射到dst中。
  函数cv2.getAffineTransform()对所指定的点完成映射后,将所有其他点的映射关系按照指定点的关系计算确定。

2) 程序

【例5.7】设计程序,完成图像仿射。

import cv2
import numpy as np
img=cv2.imread('lena.bmp')
rows,cols,ch=img.shape
p1=np.float32([[0,0],[cols-1,0],[0,rows-1]])
p2=np.float32([[0,rows*0.33],[cols*0.85,rows*0.25],[cols*0.15,rows*0.7]])
M=cv2.getAffineTransform(p1,p2)
dst=cv2.warpAffine(img,M,(cols,rows))
cv2.imshow("origianl",img)
cv2.imshow("result",dst)
cv2.waitKey()
cv2.destroyAllWindows()

  • 首先构造了两个三分量的点集合p1和p2,分别用来指代原始图像和目标图像内平行四边形的三个顶点(左上角、右上角、左下角)。
  • 然后使用M=cv2.getAffineTransform(p1, p2)获取转换矩阵M。
  • 接下来,dst=cv2.warpAffine(img, M, (cols, rows))完成了从原始图像到目标图像的仿射。

3) 运行结果

  运行程序,出现如图所示的运行结果,其中左图是原始图像,右图是仿射结果图像。


相关文章

网友评论

      本文标题:复杂的仿射变换

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