Opencv 学习笔记:循环读取文件夹中图片并动态展示

在批量处理图像时,循环读取文件夹内所有图片是基础需求。本文通过极简代码,演示如何遍历文件夹、读取图片并按固定间隔动态展示,新手可直接复用至批量图像预览、预处理场景。

核心代码实现

python 复制代码
import cv2 as cv
import os

# 初始化全局变量
b = 0
A = 0

# 定义读取文件夹图片的函数
def read_directory(directory_name):
    # 遍历文件夹内所有文件
    for filename in os.listdir(directory_name):
        # 拼接完整文件路径
        img_path = directory_name + "/" + filename
        # 读取图片
        img = cv.imread(img_path)
        if img is None:  # 跳过非图片文件
            continue
        
        print(f"当前读取:{img_path}")  # 打印当前图片路径
        # 创建自适应窗口并调整尺寸
        cv.namedWindow('outimage', cv.WINDOW_NORMAL)
        cv.resizeWindow('outimage', 600, 600)
        # 显示图片
        cv.imshow('outimage', img)
        
        # 全局变量存储当前图片(可选)
        global A
        A = img
        
        # 等待1000ms,支持按键提前跳过
        if cv.waitKeyEx(1000) > 0:
            break

# 循环读取2次文件夹(可按需调整次数)
while True:
    if b < 2:
        read_directory("D:/image")
        b += 1
    else:
        break

cv.destroyAllWindows()  # 释放窗口资源

关键知识点解析

1. 核心逻辑拆解

步骤 代码要点 作用说明
遍历文件夹 os.listdir(directory_name) 获取文件夹内所有文件名(含非图片文件)
拼接路径 directory_name + "/" + filename 生成图片完整路径,避免文件找不到
动态展示 cv.waitKeyEx(1000) 每张图片显示 1 秒,按键可提前切换
循环控制 while+计数器b 控制文件夹遍历次数(示例为 2 次)

2. 优化与避坑点

  • 过滤非图片文件 :新增if img is None判断,跳过文件夹内的 txt、exe 等非图片文件,避免窗口显示异常;
  • 窗口复用namedWindow只需创建一次,无需在循环内重复创建,减少资源占用;
  • 按键中断cv.waitKeyEx(1000) > 0支持按任意键跳过当前图片,提升操作灵活性;
  • 路径兼容性 :建议使用os.path.join(directory_name, filename)替代字符串拼接,适配 Windows/Linux 不同路径分隔符。

3. 扩展技巧

  • 按后缀过滤 :仅读取 jpg/png/bmp 图片,可添加判断:

    python

    运行

    复制代码
    if filename.endswith(('.jpg', '.png', '.bmp')):
        # 执行读取逻辑
  • 批量预处理:在显示前添加滤波、二值化等操作,实现批量处理 + 预览;

  • 无限循环展示 :删除计数器b,直接while True: read_directory(...),按 ESC 键退出(需新增 ESC 键判断)。

总结

  1. 循环读取文件夹图片核心是os.listdir遍历 +cv.imread读取,需注意路径拼接和非图片文件过滤;
  2. cv.waitKeyEx可控制图片展示间隔,兼顾自动播放和手动切换;
  3. 路径拼接优先用os.path.join,提升代码跨平台兼容性。
相关推荐
电子云与长程纠缠2 分钟前
UE5 Lyra PocketWorld进行3D内容UI预览 - 上
开发语言·学习·3d·ue5·游戏引擎
shangwen12310 分钟前
食品厂无尘车间装修施工工艺笔记:C型钢吊顶加固方案尚文净化
笔记
210Brian10 分钟前
STM32学习笔记(六)EXTI外部中断(下)
笔记·stm32·学习
MartinYeung519 分钟前
[论文学习]Latent Fusion Jailbreak: 融合有害与无害表征以诱导大语言模型产生不安全输出
学习·安全·语言模型
星恒随风19 分钟前
C++ 哈希详解(二):开放定址、哈希桶与 C++ 哈希表底层实现
c++·笔记·学习·哈希算法·散列表
迪丽热爱22 分钟前
每日英语-17
学习
2501_926978331 小时前
AGI封锁的物理边界:发现模式决定封锁可行性
人工智能·经验分享·笔记·ai写作·agi
AndrewHZ1 小时前
图像处理入门008 | 阶段总结:环境测试与基础概念测验
图像处理·python·opencv·计算机视觉·cv
Mr_liu_6662 小时前
Claude非专业入门实战笔记(附录):关闭Telemetry-遥测,消除无用网络请求与日志噪音
linux·笔记·ubuntu·ai编程
打工陈2 小时前
电路理论知识学习--(4)RC、LC、LR低通滤波对比
学习·智能硬件