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 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
starlaky2 天前
Django入门笔记
笔记·django
勇气要爆发2 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
勇气要爆发2 天前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain
别催小唐敲代码2 天前
嵌入式学习路线
学习
qianshanxue112 天前
计算机操作的一些笔记标题
笔记
土拨鼠烧电路2 天前
笔记11:数据中台:不是数据仓库,是业务能力复用的引擎
数据仓库·笔记
毛小茛2 天前
计算机系统概论——校验码
学习
土拨鼠烧电路2 天前
笔记14:集成与架构:连接孤岛,构建敏捷响应能力
笔记·架构