如何在 OpenCV 中使用 Python 进行图像旋转?
要将图像旋转一定角度,我们首先需要获取旋转矩阵。要查找旋转矩阵,我们应用 cv2.getRotationMatrix2D() 函数。此函数的语法如下:
M = cv2.getRotationMatrix2D(cr, degree, scale)
其中cr是旋转中心,degree是图像旋转的角度,scale是用于放大或缩小图像的缩放因子。
旋转矩阵 M 是一个 2×2 矩阵(NumPy 数组)。我们将旋转矩阵 M 作为参数传递给 cv2.warpAffine() 函数。请参见下面的语法:
语法
cv2.warpAffine(img, M, (width, height))
这里,
img - 要旋转的输入图像。
M - 上述定义的旋转矩阵。
(width, height) - 旋转后图像的宽度和高度。
步骤
要执行图像旋转,您可以按照以下步骤操作:
导入所需的库。在以下所有 Python 示例中,所需的 Python 库是OpenCV。确保您已安装它。
import cv2
使用 cv2.imread() 函数读取输入图像。传递输入图像的完整路径。
img = cv2.imread('interior1.jpg')
使用 cv2.getRotationMatrix2D(cr, degree, scale) 函数定义旋转矩阵 M。例如,将旋转中心cr、旋转角度 degree 和缩放因子 scale 传递给函数,例如,cr=(width/2, height/2), degree=30, scale=1。
M = cv2.getRotationMatrix2D(cr,30,1)
使用 cv2.warpAffine() 方法旋转图像。
img = cv2.warpAffine(img,M,(w,h))
显示旋转后的图像。
cv2.imshow('Image Translation', img) cv2.waitKey(0) cv2.destroyAllWindows()
让我们看一些示例,以便清楚地了解问题。
输入图像
我们在下面的示例中使用以下图像作为输入文件。
示例 1
在此程序中,我们将输入图像逆时针旋转 30 度。旋转中心是图像的中点(中心),即 (width/2, height/2)。
# import required libraries import cv2 # read the input image img = cv2.imread('interior1.jpg') # access height and width of the image height, width, _ = img.shape # define center of rotation cr = (width/2,height/2) # get the rotation matrix M = cv2.getRotationMatrix2D(cr,30,1) # apply warpAffine() method to perform image rotation dst = cv2.warpAffine(img,M,(width,height)) # display the rotated image cv2.imshow('Image',dst) cv2.waitKey(0) cv2.destroyAllWindows()
输出
执行后,它将生成以下输出窗口:
请注意,均方误差是一个标量值。
示例 2
在此程序中,我们将输入图像顺时针旋转 15 度。旋转中心为 (0,0)。
import cv2 import numpy as np img = cv2.imread('interior1.jpg') h,w, _ = img.shape M = cv2.getRotationMatrix2D((0,0),-15,1) dst = cv2.warpAffine(img,M,(w,h)) cv2.imshow('Image',dst) cv2.waitKey(0) cv2.destroyAllWindows()
输出
运行上述 Python 程序时,它将生成以下输出窗口:
广告