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

计算机视觉应用构建

图像处理技术

图像围绕中心旋转

代码

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)运行结果如下

小结

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

相关推荐
朝朝辞暮i4 小时前
VLA 系统学习第 4 课:一个 Batch 进入神经网络后,模型到底是怎么“学会”的?
人工智能·python·神经网络·vla
IT古董4 小时前
《FDE前沿部署工程师实战教程》33 - Enterprise AI Observability:从Agent Trace到全链路智能运维
数据库·人工智能
xsd202411184 小时前
地网腐蚀AI识别算法全解析:从锈蚀图像到地下腐蚀快速定位
人工智能
oooost4 小时前
pytorch学习笔记2(transformer)
人工智能·机器学习
云杂项5 小时前
Exploring Model Inversion Attacks in the Black-box Setting(个人笔记)
人工智能
还卿一钵无情泪5 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
冬奇Lab6 小时前
LLM 驱动的自动化测试系列(06):移动端自动化(二)——DroidRun/Mobilerun 的角色级模型拆分
人工智能·测试
冬奇Lab6 小时前
一天一个开源项目(第230篇):HandRaw-Style —— 把 327 种手绘风格、165 种排版、36 种配色编号化,让 AI 画图不再每次都飘
人工智能·开源·资讯
罗西的思考6 小时前
从陶哲轩的访谈看:AI 数学研究方法论 & 给其它行业的启示
人工智能
学...6 小时前
软件学报 2023 论文《面向复杂约束优化问题的进化算法综述》阅读笔记
人工智能·ga·cmop