【OpenCV数字图像处理】(4) 【Python编程】(4) 平移

【转载请注明出处:http://blog.csdn.net/leytton/article/details/35986791

配套使用的OpenCV版本:2.4.9 ; Python版本:2.7

主要参考文章(感谢作者分享)

1、python 简单图像处理(3) 平移 http://www.cnblogs.com/xianglan/archive/2010/12/26/1917070.html

2、OpenCV Python教程(1、图像的载入、显示和保存)http://blog.csdn.net/sunny2038/article/details/9057415


程序极其类似于参考文章1、文章1使用的是OpenCV2.0,而OpenCV2.49的写法稍有不同

效果参考文章1,语法参考文章2

主要思想(转载自文章1)

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

其变换公式是

【OpenCV数字图像处理】(4) 【Python编程】(4) 平移_第1张图片

可用矩阵变换公式

【OpenCV数字图像处理】(4) 【Python编程】(4) 平移_第2张图片

逆变换方法是

【OpenCV数字图像处理】(4) 【Python编程】(4) 平移_第3张图片

若移动后大小不变

当多余部分填充为黑色时

平移结果为

【OpenCV数字图像处理】(4) 【Python编程】(4) 平移_第4张图片

当多余部分为白色时

平移结果为

【OpenCV数字图像处理】(4) 【Python编程】(4) 平移_第5张图片

若移动后图像尺寸变大

则平移结果为

【OpenCV数字图像处理】(4) 【Python编程】(4) 平移_第6张图片


最终代码:


#-*-coding:utf-8-*- #解决中文注释问题
import cv2
import numpy as np

image = cv2.imread('feng.png')
offX = 20
offY = 50
#print(image.shape)
#image.shape表示图像的尺寸和通道信息(高,宽,通道)
size2 = (image.shape[0]+offY, image.shape[1]+offX,image.shape[2])
iTr1 = np.zeros(image.shape, np.uint8)
iTr2 = np.zeros(image.shape, np.uint8)
iTr3 = np.zeros(size2,np.uint8)
h = image.shape[0]
w = image.shape[1]
for i in range(h):
    for j in range(w):
        iTr3[i+offY,j+offX] = image[i,j]
        if i >=offY and j >=offX:
            iTr1[i,j] = image[i-offY,j-offX]
            iTr2[i,j] = image[i-offY,j-offX]
        else:
            iTr1[i,j] = (0,0,0)  #平移补黑(默认)
            iTr2[i,j] = (255,255,255)  #平移补白
        
cv2.imshow('image',image)
cv2.imshow('iTr1',iTr1)
cv2.imshow('iTr2',iTr2)
cv2.imshow('iTr3',iTr3)
cv2.waitKey (0)
cv2.destroyAllWindows()


若不进行处理。是一副黑色的图像4

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

效果图:

【OpenCV数字图像处理】(4) 【Python编程】(4) 平移_第7张图片


PS:参考文章1作者本意应该是x坐标平移20,y坐标平移30,结果弄反了;

本文为使结果更加明显,x坐标平移20,y坐标平移50



你可能感兴趣的:(python,opencv,图像平移,数字图像)