Opencv-python之圖像移動和旋轉

函數:cv2.warpAffine()、cv2.getRotationMatrix2D()

說明:此函數可以對圖片進行平移和旋轉操作。此函數需要和python 自帶的numpy庫結合使用。

簡單例子:

代碼如下:

<code>import cv2

import numpy as np

#打開圖片

img = cv2.imread('1.png',0)

cv2.imshow('a0',img)

#獲取圖片的長和寬

rows,cols = img.shape

#平移

#創建一個矩陣,其中100和50分別是向左平移100像素,向下平移50像素

M = np.float32([[1,0,100],[0,1,50]])

a1= cv2.warpAffine(img,M,(cols,rows))

cv2.imshow('a1',a1)

#旋轉

M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)

a2 = cv2.warpAffine(img,M,(cols,rows))

cv2.imshow('a2',a2)

 #關閉窗口

cv2.waitKey(0)

cv2.destroyAllWindows()/<code>

原圖:

Opencv-python之圖像移動和旋轉

1.png

運行代碼後:


Opencv-python之圖像移動和旋轉

1.打開後的原圖 2平移後的圖 3旋轉後的圖


詳解:

rows,cols = img.shape

此函數是獲取圖片的寬(rows)和長(cols),它只能讀取灰度圖片的參數,所以要用img = cv2.imread('1.png',0),後面這個0代表灰度,如果改成1或者刪掉,則代表彩色

M = np.float32([[1,0,100],[0,1,50]])

這個函數輸出結果如下

其中100(向左)和50(向下)代表你要移動的參數

cv2.warpAffine(img,M,(cols,rows))

img是自己導入圖片,M 是根據矩陣參數進行圖片變化,(cols,rows)這個是代表圖片(新窗口大小)

cols,和rows都等於200,如果將改成400,如cv2.warpAffine(img,M,(400,400)),則新窗口大小如下:


難點:

為什麼矩陣M前面要有0和1?

其實前面部分是,


Opencv-python之圖像移動和旋轉


[1,0;0,1]代入函數正好算出來θ=0,即不旋轉,如果要旋轉一定角度,則要算出這個矩陣大小來,這是比較麻煩的,所以要用M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)進行換算。


M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)

(cols/2,rows/2)這是座標是圖片中心,即旋轉中心,可以換成以某個座標旋轉。

90,表示逆時針旋轉90°

通過這個函數,可以直接生成旋轉90°的矩陣M,然後把M代入cv2.warpAffine(img,M,(cols,rows))即可得到旋轉後的圖片。




分享到:


相關文章: