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

计算机视觉应用构建

图像处理技术

图像围绕中心旋转

代码

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

小结

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

相关推荐
weixin_446260851 小时前
我们该打字还是语音与LLM智能体交互?——语音与键盘输入扰动全面研究
人工智能
≮傷£≯√1 小时前
opencv 图片缩放旋转
人工智能·opencv·计算机视觉
wangxin2081 小时前
别让模型猜:语言解压——把压缩的关系与言外之意变成可计算的分叉
人工智能·多智能体·大模型训练·语言学·coordclaw·语义解压
2501_909509101 小时前
DAY 41 从 MLP 到 CNN 的进化之路
人工智能·神经网络·cnn
武子康1 小时前
从生成一张图到交付一套资产:怎样验收 AI 图片的连续可编辑性
人工智能·llm·agent
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
Spring‑AI Document 对象 JSON 字段详解
人工智能·spring·json
hyuk的AI工坊2 小时前
LangChain4j RAG 深度实战:从"能用"到"好用"的 4 个优化策略
人工智能
俊哥V2 小时前
每日 AI 研究简报 · 2026-08-07
人工智能·ai
调试到凌晨2 小时前
免费配音工具前置验证价值分析:音色选型、参数调优、克隆测试的零成本方案
人工智能·经验分享·实时音视频