【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軸移動

其變換公式是



可用矩陣變換公式

逆變換方法是

若移動後大小不變

當多餘部分填充爲黑色時

平移結果爲

當多餘部分爲白色時

平移結果爲

若移動後圖像尺寸變大

則平移結果爲


最終代碼:

#-*-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)

效果圖:



PS:參考文章1作者本意應該是x座標平移20,y座標平移30,結果弄反了;

本文爲使結果更加明顯,x座標平移20,y座標平移50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章