一、OpenCV 圖像旋轉介紹
在計算機視覺和圖像處理領域,圖像旋轉是指將圖像圍繞某個中心點按照一定的角度進行轉動。旋轉操作會改變圖像中像素的位置,從而得到新的圖像布局。這一操作在很多場景中都有重要應用,比如文檔矯正、目標檢測時對圖像進行預處理、圖像增強等。
二、OpenCV 中圖像旋轉的原理
三、代碼實現
1. 導入必要的庫
import cv2
import numpy as np
2. 讀取圖像
img = cv2.imread('kele.png')
3. 使用 np.rot90 進行圖像旋轉
# 旋轉 90 度,k=-1 表示順時針旋轉 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)
np.rot90 是 NumPy 提供的函數,用于將數組(這里是圖像數據)逆時針旋轉 90 度的倍數。
k 參數指定旋轉的次數。k = -1 表示順時針旋轉 90 度(相當于逆時針旋轉 -90 度),將旋轉后的圖像存儲在 rotated_image1 中。
k = 1 表示逆時針旋轉 90 度,旋轉后的圖像存儲在 rotated_image2 中。
4. 顯示原始圖像和使用 np.rot90 旋轉后的圖像
cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imshow 函數用于在窗口中顯示圖像。分別顯示原始圖像 img 和兩次旋轉后的圖像 rotated_image1、rotated_image2,窗口標題分別為 yuantu、rotated_image1 和 rotated_image2。
cv2.waitKey(0) 用于等待用戶按鍵。參數 0 表示無限等待,直到用戶按下任意鍵。
cv2.destroyAllWindows 函數用于關閉所有由 OpenCV 打開的窗口。
5. 使用 cv2.rotate 進行圖像旋轉
rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)
cv2.rotate 是 OpenCV 提供的專門用于圖像旋轉的函數。
cv2.ROTATE_90_CLOCKWISE 表示順時針旋轉 90 度,將旋轉后的圖像存儲在 rotated_image 中。
cv2.ROTATE_90_COUNTERCLOCKWISE 表示逆時針旋轉 90 度,旋轉后的圖像存儲在 rotated_image1 中。
cv2.ROTATE_180 表示旋轉 180 度,旋轉后的圖像存儲在 rotated_image2 中。
6. 顯示使用 cv2.rotate 旋轉后的圖像
cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)
再次使用 cv2.imshow 函數顯示三次旋轉后的圖像,窗口標題分別為 shun90(順時針 90 度)、ni90(逆時針 90 度)和 180(旋轉 180 度)。
最后使用 cv2.waitKey(0) 等待用戶按鍵,但代碼中缺少關閉窗口的操作,建議添加 cv2.destroyAllWindows() 以確保程序結束時關閉所有窗口。
完整代碼:
import cv2
import numpy as npimg = cv2.imread('kele.png')
# 旋轉 90 度,k=-1 表示順時針旋轉 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)
cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)
cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)
結果顯示:
四、總結
OpenCV 提供了方便快捷的方法來實現圖像旋轉,通過 cv2.getRotationMatrix2D 和 cv2.warpAffine 函數,我們可以輕松完成圖像的旋轉操作。同時,針對旋轉后圖像可能出現的裁剪問題,我們也可以通過調整旋轉矩陣和輸出圖像大小來解決。圖像旋轉在多個領域都有廣泛的應用,對于提高圖像處理和分析的效果具有重要意義。