计算机视觉应用构建
图像处理技术
图像围绕中心旋转
代码
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)运行结果如下

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