理论知识:参考https://blog.csdn.net/on2way/article/details/40460675
Python调用opencv函数参考:https://blog.csdn.net/on2way/article/details/46801063
一、引自《数字图像处理》的基础知识汇总
这个很重要!!!这里需要注意的是反向映射和前向映射的区别,反向映射是扫描输出图像,因为输出图像的大小需要我们事先进行设置,通常设置成大小和原图像一样且像素值全为0或1的图像,根据old = T^-1*new来反向计算新图像在旧图像中对应的坐标,将旧图像对应坐标的像素值赋值给新图像中被扫描的点即可。(这里old和new为列向量【i,j,1】,T为3x3矩阵)
二、用Python自己编程实现几何变换
1、移动变换
import numpy as np
import cv2
def translate(img,tx,ty):
T = np.array([[1,0,tx],
[0,1,ty],
[0,0,1]])
h,w = img.shape
transImg = np.ones((h,w))
for i in range(h):
for j in range(w):
psNew = np.array([[i],
[j],
[1]])
#psNew = T*psOld所以psOld = T^-1*psNew
psOld = np.dot(np.linalg.inv(T),psNew)
if psOld[0][0] < h and psOld[0][0]>0 and psOld[1][0] > 0 and psOld[1][0] < w:
transImg[i,j] = img[int(psOld[0][0]),int(psOld[1][0])]
else:
transImg[i,j] = 0
return transImg
img = cv2.imread("pic2.png",0)
tranImg = translate(img,20,0)
cv2.imshow("",tranImg)
cv2.waitKey(0)
其他的参见:https://blog.csdn.net/on2way/article/details/40460675