平移是最简单的一种变换,是将一幅图像上的所有点都被按照给定的偏移量在水平方向沿X轴、在垂直方向沿y轴移动

其变换公式是


python键盘控制图片移动 python 移动图片_python键盘控制图片移动

可用矩阵变换公式

python键盘控制图片移动 python 移动图片_python键盘控制图片移动_02

逆变换方法是

python键盘控制图片移动 python 移动图片_像素点_03

若移动后大小不变

当多余部分填充为黑色时

平移结果为

python键盘控制图片移动 python 移动图片_OpenCV_04

当多余部分为白色时

平移结果为

python键盘控制图片移动 python 移动图片_python键盘控制图片移动_05

若移动后图像尺寸变大

则平移结果为

python键盘控制图片移动 python 移动图片_OpenCV_06

 

好了,我们用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)

 

我们来看运行结果

 

python键盘控制图片移动 python 移动图片_python键盘控制图片移动_07

 

可以看出对于iTr3,我们没有对多余部分进行处理,显示的颜色是黑色

所以在CreateImage函数创建一副图的时候,若不进行处理。是一副黑色的图像

即每个像素点都是0或是tuple(0,0,0)

好啦。图像的平移就是这样啦