如何使用Python在OpenCV中执行图像旋转?
要按角度执行图像旋转,首先需要获取旋转矩阵。 为了找到旋转矩阵,我们应用 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=(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 cv2
#读取输入图像
img=cv2.imread('interior1.jpg')
#访问图像的高度和宽度
height,width,_ =img.shape
#定义旋转中心
cr=(width/2,/2)
#获取旋转矩阵
M=cv2.getRotationMatrix2D(cr,30,1)
#应用warpAffine()方法执行图像旋转
dst=cv2.warpAffine(img,M,(width,height))
#显示旋转后的图像
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程序时,它将产生以下的输出窗口 −