自学内容网 自学内容网

OpenCV 图像旋转

一、OpenCV 图像旋转介绍

在计算机视觉和图像处理领域,图像旋转是指将图像围绕某个中心点按照一定的角度进行转动。旋转操作会改变图像中像素的位置,从而得到新的图像布局。这一操作在很多场景中都有重要应用,比如文档矫正、目标检测时对图像进行预处理、图像增强等。

二、OpenCV 中图像旋转的原理

三、代码实现

1. 导入必要的库

import cv2
import numpy as np

2. 读取图像

img = cv2.imread('kele.png')

3. 使用 np.rot90 进行图像旋转

# 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)

np.rot90 是 NumPy 提供的函数,用于将数组(这里是图像数据)逆时针旋转 90 度的倍数。
k 参数指定旋转的次数。k = -1 表示顺时针旋转 90 度(相当于逆时针旋转 -90 度),将旋转后的图像存储在 rotated_image1 中。
k = 1 表示逆时针旋转 90 度,旋转后的图像存储在 rotated_image2 中。

4. 显示原始图像和使用 np.rot90 旋转后的图像

cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow 函数用于在窗口中显示图像。分别显示原始图像 img 和两次旋转后的图像 rotated_image1、rotated_image2,窗口标题分别为 yuantu、rotated_image1 和 rotated_image2。
cv2.waitKey(0) 用于等待用户按键。参数 0 表示无限等待,直到用户按下任意键。
cv2.destroyAllWindows 函数用于关闭所有由 OpenCV 打开的窗口。

5. 使用 cv2.rotate 进行图像旋转

rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)

cv2.rotate 是 OpenCV 提供的专门用于图像旋转的函数。
cv2.ROTATE_90_CLOCKWISE 表示顺时针旋转 90 度,将旋转后的图像存储在 rotated_image 中。
cv2.ROTATE_90_COUNTERCLOCKWISE 表示逆时针旋转 90 度,旋转后的图像存储在 rotated_image1 中。
cv2.ROTATE_180 表示旋转 180 度,旋转后的图像存储在 rotated_image2 中。

6. 显示使用 cv2.rotate 旋转后的图像

cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)

再次使用 cv2.imshow 函数显示三次旋转后的图像,窗口标题分别为 shun90(顺时针 90 度)、ni90(逆时针 90 度)和 180(旋转 180 度)。
最后使用 cv2.waitKey(0) 等待用户按键,但代码中缺少关闭窗口的操作,建议添加 cv2.destroyAllWindows() 以确保程序结束时关闭所有窗口。

完整代码:

import cv2
import numpy as np

img = cv2.imread('kele.png')
# 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)
cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)
cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)

结果显示:

四、总结
OpenCV 提供了方便快捷的方法来实现图像旋转,通过 cv2.getRotationMatrix2D 和 cv2.warpAffine 函数,我们可以轻松完成图像的旋转操作。同时,针对旋转后图像可能出现的裁剪问题,我们也可以通过调整旋转矩阵和输出图像大小来解决。图像旋转在多个领域都有广泛的应用,对于提高图像处理和分析的效果具有重要意义。


原文地址:https://blog.csdn.net/ycy200377/article/details/147105341

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!