OpenCV 旋轉影象
本教程將討論在 Python 中使用 OpenCV 的 rotate()
和 warpAffine()
函式旋轉影象。
在 Python 中使用 OpenCV 的 rotate()
函式旋轉影象
我們可以使用 OpenCV 的 rotate()
函式來旋轉影象。rotate()
函式的第一個引數是我們要旋轉的影象。第二個引數指定影象將旋轉多少以及哪個方向。
使用 rotate()
函式旋轉影象只有三種方法。我們可以將第二個引數設定為 cv2.ROTATE_90_CLOKWISE
以將影象順時針旋轉 90 度。
我們可以使用 cv2.ROTATE_180
將影象旋轉 180 度或翻轉它。我們可以使用 cv2.ROTATE_90_COUNTERCLOCKWISE
將影象逆時針旋轉 90 度或順時針旋轉 270 度。這是使用 rotate()
函式旋轉影象的僅有的三個角度。
例如,讓我們使用 imread()
函式讀取影象,將其順時針旋轉 90 度,然後使用 imshow()
函式將其與原始影象一起顯示。請參閱下面的程式碼。
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
image_norm = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", image_norm)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
使用 rotate()
,我們只能在三個角度上旋轉影象,但如果我們想在每個角度上旋轉影象,我們可以使用 warpAffine()
函式,如下所述。
在 Python 中使用 OpenCV 的 warpAffine()
函式旋轉影象
我們可以使用 OpenCV 的 warpAffine()
函式以任意角度旋轉影象。warpAffine()
函式將一個矩陣轉換為另一個矩陣。
要旋轉影象,我們必須使用 OpenCV 的 getRotationMatrix2D()
函式找到其旋轉矩陣。
getRotationMatrix2D()
的第一個引數是我們想要旋轉的影象的中心。第二個引數是旋轉的角度,第三個引數是影象的比例。
如果比例小於 1,則影象的尺寸會比原始影象小,或者說,它會被縮小。如果比例為正數,影象將被縮放或放大。如果比例為 1,則影象不會被縮放。
warpAffine()
函式的第一個引數是我們想要旋轉的影象。第二個引數是旋轉矩陣,第三個引數是輸出影象的大小。
例如,讓我們將上面的影象圍繞其中心旋轉 45 度。請參閱下面的程式碼。
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
(h, w) = image.shape[:2]
center = (w / 2, h / 2)
angle = 30
scale = 1
M = cv2.getRotationMatrix2D(center, angle, scale)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
在上面的程式碼中,我們使用 shape 方法求給定影象的長寬,然後通過取一半的長寬來計算影象的中心。我們可以改變中心、角度和比例值來得到想要的結果。
我們還可以使用 borderMode
引數設定輸出影象的邊框模式。預設情況下,邊框模式設定為 cv2.BORDER_CONSTANT
,如你所見,輸出影象的角落沒有邊框。
我們可以將邊框模式設定為 cv2.BORDER_TRANSPARENT
。輸出影象將具有與原始影象相同的邊框,或者角將保持不變。
我們可以將邊框模式設定為 cv2.BORDER_REPLICATE
。將使用附近的畫素繪製輸出影象的邊框或角。
單擊此連結瞭解有關邊框模式的更多詳細資訊。
相關文章 - Python OpenCV
- OpenCV sobel() 函式
- Python 中 OpenCV 的 GUI 特性
- 在 Python 中使用 OpenCV 的 HSV 顏色空間
- 在 Python 中使用 OpenCV 建立二維碼掃描器
- OpenCV 中的模糊濾鏡
- 使用 OpenCV 進行物件跟蹤