图像处理技术(图像的水平翻转垂直翻转以及水平加垂直翻转)

计算机视觉应用构建

图像处理技术

图像的水平翻转垂直翻转以及水平加垂直翻转

代码

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)对比图像

小结

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

相关推荐
陈嘿萌11 小时前
ACM MM 2026|告别密集交互!ProtoHGF-Net:基于原型超图的RGBT目标检测新范式
图像处理·人工智能·深度学习·目标检测·计算机视觉·学术研究与理论基础
指针向南12 小时前
PDF 转 HTML 免费5种方法,体积0.5%到368%
图像处理·人工智能·计算机视觉·pdf
陕西亿鑫鸿物联技术有限公司14 小时前
传统安防利旧升级实战:如何基于边缘计算接入海康大华IPC构建AI分析系统?
深度学习·计算机视觉·边缘计算·物联网架构·流媒体技术
拜小白15 小时前
【论文解读】Ray-casting MLC:用几何感知光线投射做自训练房间布局估计
深度学习·计算机视觉·全景图
MarkHD1 天前
超分辨率与图像放大:从ESRGAN的纹理重建到UltimateSDUpscale的4K分块实战
人工智能·深度学习·计算机视觉
硅谷秋水2 天前
Agentic World Action Models(AW-0)贡献与不足分析
人工智能·机器学习·计算机视觉·语言模型·机器人
拜小白2 天前
【论文解读】OmniSRNet:畸变感知学习——从单张全向图像恢复房间结构
深度学习·计算机视觉·全景图
何以解忧唯有撸码2 天前
c# + YOLODotNet+OpenCVSharp 实现物品轨迹追踪
计算机视觉·c#·winform·yolov8·opencvsharp
Solange__2 天前
航天科普怎么用AI生成3D场景?从科学约束、尺度分层到网页展示的完整方案
图像处理·人工智能·游戏·3d·ai·自然语言处理·关卡设计
t_niu_niu2 天前
bilateral_filter_paper
图像处理·verilog·双边滤波器