因為旋轉時需要以某個點為旋轉中心,這邊需要特別用由 OpenCV 提供的shape
函式找出圖片的長與寬,才能進行後續動作~
旋轉時會用到 cv2.getRotationMatrix2D
這個函式! 括號裡面
import cv2
img = cv2.imread('img.jpg')
(h, w, d) = img.shape # 讀取圖片大小
print(img.shape)
center = (w // 2, h // 2) # 找到圖片中心
M = cv2.getRotationMatrix2D(center, 20, 1.0) #旋轉20度(逆時針)
# 處理旋轉過後的圖片
rotate_img = cv2.warpAffine(img, M, (w, h))
cv2.imshow("Result", rotate_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
執行結果:
因為圖片在旋轉過後會有被裁掉的地方 → 用cv2.warpAffine
函式處理:
圖像的旋轉加上拉升就是圖像仿射
變換,仿射變化需要一個 M 矩陣就可以,但是由於仿射變換比較複雜,一般直接找很難找到這個矩陣。
opencv 提供了根據變換前後三個點的對應關係來自動求解 M。
函數輸出的就是模擬射位置矩陣 M!