图像处理技术(图像围绕中心旋转)

计算机视觉应用构建

图像处理技术

图像围绕中心旋转

代码

python 复制代码
from __future__ import print_function  # Python 2/3 兼容:使 print 成为函数

import cv2          # 导入 OpenCV 库,用于图像处理
import numpy as np  # 导入 NumPy 库,用于数值计算和矩阵操作

# ==================== 1. 加载图像 ====================
# 指定图像文件的路径(相对路径,位于当前目录下的 images 文件夹中)
imagePath = "images/zebrasmall.png"
# 使用 OpenCV 的 imread 函数读取图像
# 返回值是一个 NumPy 数组,表示图像的像素数据(BGR 格式)
image = cv2.imread(imagePath)

# 检查图像是否加载成功(防御性编程)
if image is None:
    print(f"错误:无法加载图像,请检查路径 '{imagePath}' 是否存在")
    exit(1)

# 获取图像的尺寸信息
# image.shape 返回 (高度, 宽度, 通道数)
# shape[:2] 取前两个值:高度和宽度
(h, w) = image.shape[:2]
print(f"图像尺寸:高度={h}像素, 宽度={w}像素")

# ==================== 2. 显示原始图像 ====================
# 创建窗口并显示原始图像(用于与旋转后的图像进行对比)
cv2.imshow("1. Original Image ", image)

# ==================== 3. 定义旋转变换矩阵 ====================
# 设置旋转中心:图像中心点 (h//2, w//2)
# 注意:getRotationMatrix2D 参数顺序为 (中心点x坐标, 中心点y坐标)
# 对于图像,x = 列索引(宽度),y = 行索引(高度)
# 所以中心点坐标为 (w//2, h//2)
center = (w//2, h//2)  # 为 (宽度//2, 高度//2)
angle = -45            # 旋转角度:-45度(负值表示顺时针旋转)
scale = 1.0            # 缩放比例:1.0 表示不缩放

# 使用 OpenCV 的 getRotationMatrix2D 函数生成旋转矩阵
# 参数说明:
#   - center:旋转中心坐标 (x, y)
#   - angle:旋转角度(度),正值=逆时针,负值=顺时针
#   - scale:缩放因子
rotationMatrix = cv2.getRotationMatrix2D(center, angle, scale)
print(f"旋转矩阵:\n{rotationMatrix}")

# ==================== 4. 执行旋转变换 ====================
# warpAffine 函数参数说明:
#   - image:原始输入图像
#   - rotationMatrix:2x3 的仿射变换矩阵(旋转矩阵)
#   - (image.shape[1], image.shape[0]):输出图像尺寸 (宽度, 高度)
#     * image.shape[1] = 图像宽度(列数)
#     * image.shape[0] = 图像高度(行数)
# 超出边界的像素会被填充为黑色(默认值)
rotatedImage = cv2.warpAffine(image, rotationMatrix,
                              (image.shape[1], image.shape[0]))

# ==================== 5. 显示旋转后的图像 ====================
# 创建窗口并显示旋转后的图像
cv2.imshow("2. Rotated Image ", rotatedImage)

# ==================== 6. 并排显示对比(增强可视化) ====================
# 将原始图像和旋转后的图像水平拼接,方便对比查看
# 注意:两张图像尺寸必须相同,否则无法拼接
comparison = np.hstack((image, rotatedImage))  # 水平堆叠
cv2.imshow("3. Comparison ", comparison)

# ==================== 7. 等待用户操作并清理资源 ====================
print("按任意键关闭所有窗口...")
cv2.waitKey(0)  # 等待用户按下任意按键

# 关闭所有 OpenCV 创建的窗口(释放资源)
cv2.destroyAllWindows()

结果

(1)原始图像

(2)中心旋转后的图像

(3)对比图像

(4)运行结果如下

小结

文章仅供参考,有错处欢迎评论区补充参考,文章作为学习回溯使用,不会再多参与,再此共勉

相关推荐
cd_94921721几秒前
角色模型用AI生成纹理靠谱吗,能直接用于游戏吗?
人工智能·游戏
YOLO数据集集合4 分钟前
车牌目标检测数据集 | 车牌检测 智能交通 车辆识别 目标检测8003期
人工智能·目标检测·计算机视觉·车牌检测·非机动车车牌
IT_陈寒8 分钟前
SpringBoot自动配置失效?你可能漏了这个小开关
前端·人工智能·后端
磁场转动100万匹14 分钟前
OpenCV 答题卡识别判卷实战:从图像预处理到自动评分
人工智能·opencv·计算机视觉
cd_9492172129 分钟前
AI自动生成纹理能保持角色不同部位风格一致吗?
人工智能
人工智能培训36 分钟前
人工智能数据安全下的个人信息保护实践方案
大数据·人工智能·算法·生活
大象AI共学37 分钟前
# 【AI成本治理】额度缩水 44%-76% 之后的自查清单:10 题体检表 + 三档模型组合 + 免费/本地化实测方案
人工智能
OceanBase数据库官方博客38 分钟前
亮相“十五五”公积金高质量发展大会“AI 数据库”助力智慧公积金升级
数据库·人工智能
学习星球43 分钟前
2026 AI游戏开发实战指南:从NVIDIA ACE到Summer Engine,AI如何重塑游戏开发
人工智能·microsoft
稚语成长1 小时前
适趣大历史是什么?儿童历史启蒙 AI App 解析(H1–H7 分级、适合几岁、怎么用)
人工智能