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

计算机视觉应用构建

图像处理技术

图像围绕中心旋转

代码

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

小结

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

相关推荐
云和数据.ChenGuang2 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
西西木科技丨Shopify开发机构2 小时前
CalDigit TS4案例:AI产品图的Shopify整站接入与验收
人工智能·shopify·独立站
2601_965448872 小时前
AI视频制作:做系列节气民俗视频音色不统一,AI 音色克隆省事的方法
人工智能·机器学习·音视频
美狐美颜SDK开放平台2 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
HRaitest3 小时前
秋招技术岗招聘提效:三类 AI 招聘方案的技术底层与选型逻辑
大数据·人工智能·求职招聘·ai-native
天远数科3 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
车软学堂3 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
海盗12344 小时前
AI 新闻日报 10-28:Atria Dawn 完整版开源、Cursor Agent SDK 转正、Genie 4 实时世界模型
人工智能·机器人·开源·人工智能aigc
志尊宝4 小时前
AI原生前端开发(035):AI时代的工程化最佳实践总结
人工智能·ai-native
冬奇Lab4 小时前
一天一个开源项目(第251篇):Claude SEO —— 装进 Claude Code 的 SEO 审计团队,26 个子技能 + 19 个专家 Agent 并行体检网站
人工智能·开源