OpenCV计算机视觉 08 图像的旋转

图像的旋转

下面是一张小猪佩奇的照片,请进行顺时针90度,逆时针90度,180度旋转

方法一:使用了 NumPy 库的 np.rot90() 函数来实现图像的旋转

np.rot90(img, k=-1) 表示将输入的图像 img 顺时针旋转 90 度,

np.rot90(img, k=1) 表示将图像逆时针旋转 90 度。

python 复制代码
import cv2
import numpy as np
#导入原图
img=cv2.imread('小猪佩奇.png')
​
​
# 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(img, k=-1)
# 旋转 90 度,k=1 表示逆时针旋转 90 度
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()

方法二:OpenCV 库的 cv2.rotate() 函数来实现图像的旋转

python 复制代码
cv2.rotate(image, flag)

参数说明:

image:要旋转的图像。

flag:指定旋转的方式,有以下几种取值:

cv2.ROTATE_90_CLOCKWISE:顺时针旋转 90 度

cv2.ROTATE_90_COUNTERCLOCKWISE:逆时针旋转 90 度

cv2.ROTATE_180:旋转 180 度

然后通过 cv2.imshow() 函数分别展示顺时针旋转 90 度后的图像(名为 shun90 )、逆时针旋转 90 度后的图像(名为 ni90 )和旋转 180 度后的图像(名为 180 )。

python 复制代码
import cv2
#导入原图
img=cv2.imread('小猪佩奇.png')
​
rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)  #顺时针90度
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)  #逆时针90度
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)    #旋转180度
cv2.imshow('shun90',rotated_image)
cv2.imshow('ni90',rotated_image1)
cv2.imshow('180',rotated_image2)
cv2.waitKey(0)

这两种方法只能进行90度的整数倍的度数旋转,那要是旋转30度,60度怎么办呢

我们可以先写入下面这个函数

python 复制代码
def rotate_image(image, angle, direction='counterclockwise'):
    (h, w) = image.shape[:2]  # 获取图像的高度 h 和宽度 w
    center = (w // 2, h // 2)  # 计算图像的中心坐标
​
    if direction == 'counterclockwise':  # 如果旋转方向是逆时针
        M = cv2.getRotationMatrix2D(center, angle, 1.0)  # 获取逆时针旋转的变换矩阵
    elif direction == 'clockwise':  # 如果旋转方向是顺时针
        M = cv2.getRotationMatrix2D(center, -angle, 1.0)  # 获取顺时针旋转的变换矩阵
​
    rotated = cv2.warpAffine(image, M, (w, h))  # 应用变换矩阵对图像进行旋转
    return rotated  # 返回旋转后的图像

直接调用这个函数就可以旋转任意度数了

python 复制代码
import cv2
#导入原图
img=cv2.imread('小猪佩奇.png')
​
shun30 = rotate_image(img, 30, 'clockwise')  # 顺时针旋转 30 度
ni60= rotate_image(img, 60, 'counterclockwise')  # 逆时针旋转 60 度
​
cv2.imshow('original', img)
cv2.imshow('shun30', shun30)
cv2.imshow('ni60', ni60)
cv2.waitKey(0)
相关推荐
IT_陈寒1 天前
Redis性能提升50%的7个关键优化策略,90%开发者都不知道第5点!
前端·人工智能·后端
乐迪信息1 天前
乐迪信息:AI摄像机在智慧煤矿人员安全与行为识别中的技术应用
大数据·人工智能·算法·安全·视觉检测
AI人工智能+1 天前
炫光活体检测技术:通过光学技术实现高效、安全的身份验证,有效防御多种伪造手段。
人工智能·深度学习·人脸识别·活体检测
咔咔一顿操作1 天前
第七章 Cesium 3D 粒子烟花效果案例解析:从原理到完整代码
人工智能·3d·信息可视化·cesium
微三云-轩1 天前
区块链:重构企业数字化的信任核心与创新动力
人工智能·小程序·区块链·生活·我店
君名余曰正则1 天前
机器学习04——决策树(信息增益、信息增益率、ID3、C4.5、CART、剪枝、连续值缺失值处理)
人工智能·决策树·机器学习
中电金信1 天前
中电金信:AI重构测试体系·智能化时代的软件工程新范式
人工智能·重构·软件工程
多恩Stone1 天前
【3DV 进阶-2】Hunyuan3D2.1 训练代码详细理解下-数据读取流程
人工智能·python·算法·3d·aigc
lypzcgf1 天前
Coze源码分析-资源库-删除插件-后端源码-错误处理与总结
人工智能·后端·go·coze·coze源码分析·ai应用平台·agent平台
AIGC小火龙果1 天前
OpenAI的开源王牌:gpt-oss上手指南与深度解析
人工智能·经验分享·gpt·搜索引擎·aigc·ai编程