平移是最简单的一种变换,是将一幅图像上的所有点都被按照给定的偏移量在水平方向沿X轴、在垂直方向沿y轴移动
其变换公式是
可用矩阵变换公式
逆变换方法是
若移动后大小不变
当多余部分填充为黑色时
平移结果为
当多余部分为白色时
平移结果为
若移动后图像尺寸变大
则平移结果为
好了,我们用OpenCV实现上面的运算
import cv
image = cv.LoadImage('lena.jpg',1)
x = 20
y = 30
size = (image.width,image.height)
size2 = (image.width+y , image.height+x)
iTr1 = cv.CreateImage(size,image.depth,image.nChannels)
iTr2 = cv.CreateImage(size,image.depth,image.nChannels)
iTr3 = cv.CreateImage(size2,image.depth,image.nChannels)
h = image.height
w = image.width
for i in range(h):
for j in range(w):
iTr3[i+x,j+y] = image[i,j]
if i >=x and j >=y:
iTr1[i,j] = image[i-x,j-y]
iTr2[i,j] = image[i-x,j-y]
else:
iTr1[i,j] = (0,0,0)
iTr2[i,j] = (255,255,255)
cv.ShowImage('image',image)
cv.ShowImage('iTr1',iTr1)
cv.ShowImage('iTr2',iTr2)
cv.ShowImage('iTr3',iTr3)
cv.WaitKey(0)
我们来看运行结果
可以看出对于iTr3,我们没有对多余部分进行处理,显示的颜色是黑色
所以在CreateImage函数创建一副图的时候,若不进行处理。是一副黑色的图像
即每个像素点都是0或是tuple(0,0,0)
好啦。图像的平移就是这样啦