计算机视觉应用构建
图像处理技术
图像的水平翻转垂直翻转以及水平加垂直翻转
代码
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)
# 获取图像尺寸信息
(h, w) = image.shape[:2]
print(f"图像尺寸:高度={h}像素, 宽度={w}像素")
# ==================== 2. 显示原始图像 ====================
# 创建窗口并显示原始图像(用于与翻转后的图像进行对比)
cv2.imshow("0. Original Image ", image)
# ==================== 3. 水平翻转(镜像) ====================
# cv2.flip() 函数参数说明:
# - src:输入图像
# - flipCode:翻转模式
# * 1:水平翻转(左右翻转,沿Y轴镜像)
# * 0:垂直翻转(上下翻转,沿X轴镜像)
# * -1:水平+垂直翻转(同时翻转,相当于旋转180°)
#
# 水平翻转:将图像左右颠倒,像照镜子一样
flippedHorizontally = cv2.flip(image, 1)
cv2.imshow("1. Flipped Horizontally ", flippedHorizontally)
# 等待用户按键后再继续执行(显示水平翻转结果)
# 注意:原代码使用 waitKey(-1),等同于 waitKey(0),无限等待
cv2.waitKey(0) # 按任意键继续
# ==================== 4. 垂直翻转 ====================
# 垂直翻转:将图像上下颠倒
flippedVertically = cv2.flip(image, 0)
cv2.imshow("2. Flipped Vertically ", flippedVertically)
# 等待用户按键后再继续执行
cv2.waitKey(0) # 按任意键继续
# ==================== 5. 水平+垂直翻转 ====================
# 水平+垂直翻转:同时进行水平和垂直翻转
# 效果相当于将图像旋转180°
flippedHV = cv2.flip(image, -1)
cv2.imshow("3. Flipped Both H and V ", flippedHV)
# 等待用户按键后关闭所有窗口
cv2.waitKey(0) # 按任意键继续
# ==================== 6. 并排显示对比(可选增强) ====================
# 为了更直观地对比四种效果,创建一个包含所有翻转图像的对比图
# 注意:所有图像尺寸相同,可以垂直堆叠
# 方法1:垂直堆叠显示四种状态
top_row = np.hstack((image, flippedHorizontally)) # 原始 | 水平翻转
bottom_row = np.hstack((flippedVertically, flippedHV)) # 垂直翻转 | 水平+垂直翻转
comparison = np.vstack((top_row, bottom_row)) # 上下堆叠
cv2.imshow("4. Comparison ", comparison)
# ==================== 7. 等待用户操作并清理资源 ====================
print("\n所有翻转效果已显示")
print("按任意键关闭所有窗口...")
cv2.waitKey(0) # 等待用户按下任意按键
# 关闭所有 OpenCV 创建的窗口(释放资源)
cv2.destroyAllWindows()
结果
(1)原始图像

(2)水平翻转

(3)垂直翻转

(4)两者都翻转

(5)对比图像

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