如何在OpenCV Python中旋转图像?

如何在OpenCV Python中旋转图像?

在图像处理中,常常需要对图像进行旋转操作,比如将横屏图片旋转成竖屏状态,或者将斜着的文字图片调整为正常状态等。在OpenCV Python中,可以通过简单的操作实现图像的旋转功能。

下面介绍几种实现图像旋转的方式。

1. 使用cv2.getRotationMatrix2D()函数

cv2.getRotationMatrix2D(center, angle, scale)函数可以获得一个2×3的旋转矩阵,其中center表示旋转中心点的坐标,angle表示旋转的角度,scale表示缩放比例。

import cv2

img = cv2.imread('img.jpg', 1)
(h, w) = img.shape[:2] # 获取图像的宽和高

# 定义旋转中心坐标
center = (w / 2, h / 2)

# 定义旋转角度
angle = 30

# 定义缩放比例
scale = 1

# 获得旋转矩阵
M = cv2.getRotationMatrix2D(center, angle, scale)

# 进行旋转操作
result = cv2.warpAffine(img, M, (w, h))

# 显示旋转后的图片
cv2.imshow('result', result)

# 按下任意键退出
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 使用cv2.transpose()函数

cv2.transpose(src)函数可以实现将一幅图像的行和列进行交换,实现旋转的效果。比如,原来图像的形状为(h, w),交换之后的形状就是(w, h)。

同时,在图像处理中,经常会使用cv2.flip()函数进行图像的上下翻转和左右翻转操作。

下面,我们可以将这两个函数结合起来,实现图像的旋转效果。

import cv2

img = cv2.imread('img.jpg', 1)

# 进行矩阵转置,相当于逆时针旋转90度
img = cv2.transpose(img)

# 进行左右翻转,相当于再旋转180度
img = cv2.flip(img, 1)

# 显示旋转后的图片
cv2.imshow('result', img)

# 按下任意键退出
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 使用Numpy数组进行图像旋转

在Python中,可以使用Numpy库常用的矩阵操作函数进行矩阵旋转。对于图像来说,其本质上就是一个三维的数组,因此可以在代码中定义Numpy数组,并使用相关操作函数进行旋转。

import cv2
import numpy as np

img = cv2.imread('img.jpg', 1)

# 定义旋转角度
angle = 45

# 定义缩放比例
scale = 1

# 获取图像的中心坐标
(h, w) = img.shape[:2]
center = (w / 2, h / 2)

# 构造旋转矩阵
M = cv2.getRotationMatrix2D(center, angle, scale)

# 计算正弦和余弦值
cos = np.abs(M[0, 0])
sin = np.abs(M[0, 1])

# 计算旋转后新图像的尺寸
new_w = int((h * sin) + (w * cos))
new_h = int((h * cos) + (w * sin))

# 调整旋转后的矩阵
M[0, 2] += (new_w / 2) - center[0]
M[1, 2] += (new_h / 2) - center[1]

# 进行仿射变换
result = cv2.warpAffine(img, M, (new_w, new_h))

# 显示旋转后的图像
cv2.imshow('result', result)

# 按下任意键退出
cv2.waitKey(0)
cv2.destroyAllWindows()

注意,在使用Numpy数组进行旋转时,需要特别注意变换后的图像大小的计算方法。

结论

本文介绍了3种常见的方法实现图像旋转,在实际应用中,根据实际需要选择合适的方法。值得注意的是,图像旋转过程中可能存在黑边问题,因此可以使用cv2.copyMakeBorder()函数在旋转后的图像周围添加所需的颜色以避免黑边的影响。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Python OpenCV