import cv2
import numpy as np
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')#原始图像
height,width=img.shape[:2]#图像的高度和宽度
rows,cols,ch=img.shape#图像的行和列
x=100#向右平移100个像素
y=200#向下平移200个像素
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=np.float32([[1,0,x],[0,1,y]])#图像平移
N=cv2.getRotationMatrix2D((width/2,height/2),45,0.6)#图像旋转
P=cv2.getAffineTransform(p1,p2)#图像仿射
move=cv2.warpAffine(img,M,(width,height))#图像仿射
rotate=cv2.warpAffine(img,N,(width,height))#图像仿射
dst=cv2.warpAffine(img,P,(cols,rows))#图像仿射
cv2.imshow("original",img)
cv2.imshow("move",move)
cv2.imshow("rotation",rotate)
cv2.imshow("result",dst)
cv2.waitKey()
cv2.destroyAllWindows()
算法:图像仿射是图像通过一系列几何变换实现平移、旋转等多种操作。仿射变换保持图像平直性和平行性。平直性是图像经过仿射变换后,直线仍然是直线。平行性是图像经过仿射变换后,平行线仍然是平行线。
变换矩阵(映射矩阵)M实现变换: dst(x, y)= src(M11·x+M12·y+M·13, M21·x+M22·y+M·23)
例子:
将原始图像src向右平移100个像素、向下平移动200个像素,对应关系:
dst (x, y)=src (x+100, y+200) 上述表达式补充完整: dst (x, y)=src (1·x+ 0·y+100, 0·x+1·y+200)
变换矩阵M:
M11=1 M12=0 M13=100 M21=0 M22=1 M23=200
retval=cv2.getRotationMatrix2D(center, angle, scale)
retval=cv2.getAffineTransform(src, dst)
dst=cv2.warpAffine(src, M, dsize[, flags[, borderMode[, borderValue]]])
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!