如何在 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 程序时,它将生成以下输出窗口:

更新于: 2022年9月27日

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告