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

计算机视觉应用构建

图像处理技术

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

代码

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

小结

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

相关推荐
netccdn3 小时前
Hough变换检测直线(Matlab)
开发语言·计算机视觉·matlab
具身新纪元4 小时前
CVPR 2026|新缺陷不断上线,如何让工业视觉检测模型不忘旧账?
人工智能·深度学习·目标检测·机器学习·计算机视觉·目标跟踪·视觉检测
盼小辉丶5 小时前
PyTorch计算机视觉(5)——生成对抗网络(Generative Adversarial Network,GAN)
pytorch·生成对抗网络·计算机视觉
一个王同学19 小时前
从零到一 | CV转多模态大模型 | week21 | 实战项目-DocuMind-VL:基于 OCR 与 Qwen-VL 的文档多模态问答系统(一)
人工智能·深度学习·计算机视觉·ocr·vllm
≮傷£≯√19 小时前
opencv 调节图片对比度和亮度
人工智能·opencv·计算机视觉
Microvision维视智造20 小时前
近十年视觉市场变化趋势分析——客户需求的三次跃迁
人工智能·计算机视觉·视觉检测·机器视觉
≮傷£≯√1 天前
opencv4.6.0 + cmake3.25.1+ Contrib (qt5.14.2)
opencv·qt5
江畔柳前堤1 天前
YOLO 目标检测全流程深度剖析
人工智能·yolo·目标检测·计算机视觉·unity·面试·vllm
小徐xxx1 天前
图像的形态学操作知识
计算机视觉·数字图像处理·图像形态学操作