《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://img.haomeiwen.com/i17748967/94625a269c47bc62.jpg)
网友评论