1. 程式人生 > 其它 >cv2 imread函式 python_Opencv-python之影象移動和旋轉

cv2 imread函式 python_Opencv-python之影象移動和旋轉

原創首發

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

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

簡單例子:

程式碼如下:

import cv2import 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()

原圖:

7c7fca90bd1b01e73c61d90825ff007b.png

1.png

執行程式碼後:

74aa2b87df3199568aef052b9445e775.png

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?

其實前面部分是,

d1d75728ba712e0da522d7d141002eed.png

[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))即可得到旋轉後的圖片。

喜歡的話點個贊,謝謝大家!