如何使用Python在OpenCV中执行图像旋转?

如何使用Python在OpenCV中执行图像旋转?

OpenCV 是一款开源计算机视觉库,其中包含众多图像处理算法,广泛应用于计算机视觉领域。在处理图像时,常常需要执行旋转操作。本文将介绍如何使用 PythonOpenCV 旋转图像。

1. 基本的图像旋转

在 OpenCV 中,可以使用函数 cv2.getRotationMatrix2D 来获得一个旋转矩阵,再使用函数 cv2.warpAffine 对图像进行旋转操作。

下面给出一个示例,顺时针旋转 45 度:

import cv2
import numpy as np

img = cv2.imread("test.jpg")
rows, cols = img.shape[:2]

M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1)
dst = cv2.warpAffine(img,M,(cols,rows))

cv2.imshow("dst", dst)
cv2.waitKey(0)

解释一下上述代码:

  1. 首先,我们使用 cv2.imread 函数读取图片。该函数会将图片解码为一个 NumPy 数组。
  2. 获得图片的行数和列数。为了方便,可以使用 Python 的切片语法来获取图像的尺寸。注意,OpenCV 中的图像数组是以行列格式存储的。
  3. 使用 cv2.getRotationMatrix2D 函数获得一个旋转矩阵 M。该函数接受三个参数:旋转中心点坐标、旋转角度(顺时针为正)、缩放比例。
  4. 使用 cv2.warpAffine 函数对图像进行旋转操作。该函数接受三个参数:源图像、旋转矩阵 M、输出图像大小。在这里,我们将输出图像的大小设为源图像的大小。

2. 已知旋转角度和旋转中心坐标的图像旋转

在上述示例中,我们旋转的中心是图片的中心,旋转角度为 45 度。但有时候,我们需要指定旋转中心的坐标和旋转的角度。

下面给出一个例子,将图片绕着左上角旋转 30 度:

import cv2
import numpy as np

img = cv2.imread("test.jpg")
rows, cols = img.shape[:2]

# 定义旋转中心和旋转角度
M = cv2.getRotationMatrix2D((0, 0), 30, 1)

# 计算旋转后的新坐标
cos = np.abs(M[0, 0])
sin = np.abs(M[0, 1])
new_w = int((rows * sin) + (cols * cos))
new_h = int((rows * cos) + (cols * sin))
M[0, 2] += (new_w / 2) - cols
M[1, 2] += (new_h / 2) - rows

# 执行旋转操作
dst = cv2.warpAffine(img, M, (new_w, new_h))

cv2.imshow("dst", dst)
cv2.waitKey(0)

在上述代码中,我们首先定义旋转中心坐标为 (0, 0),旋转角度为 30 度,然后计算旋转后图片的新坐标。最后,使用 cv2.warpAffine 函数对图像进行旋转操作。

3. 逆时针旋转 90 度

如果需要对图像进行逆时针方向的旋转操作,可以通过将旋转中心坐标改为图片的左上角,并将旋转角度改为 -90 度来实现。

下面给出一个示例:

import cv2
import numpy as np

img = cv2.imread("test.jpg")

# 获取图片的行数和列数
rows, cols = img.shape[:2]

# 逆时针旋转90度
M = cv2.getRotationMatrix2D((0,0), -90, 1)

# 计算旋转后的新坐标
new_w = rows
new_h = cols
M[0, 2] += new_w
M[1, 2] = new_h

# 执行旋转操作
dst = cv2.warpAffine(img, M, (new_w, new_h))

cv2.imshow("dst", dst)
cv2.waitKey(0)

在上述代码中,我们首先获取图片的行数和列数,然后将旋转中心坐标设为图片的左上角,旋转角度为 -90 度,计算旋转后的新坐标。最后,使用 cv2.warpAffine 函数对图像进行旋转操作。

结论

本文介绍了如何使用 Python 和 OpenCV 对图像进行旋转操作。我们可以指定旋转中心的坐标和旋转角度,并计算出旋转后的新坐标,最后使用 cv2.warpAffine 函数对图像进行旋转操作。希望这篇文章能帮助大家更好地理解图像旋转的实现方式。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Python OpenCV