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,提升代码跨平台兼容性。
相关推荐
Ztt6666666666 小时前
【无标题】
经验分享·笔记·其他·百度·微信公众平台
DFT计算杂谈6 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
依然范特东6 小时前
强化学习笔记4--TD算法
笔记
AOwhisky7 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统
茯苓gao8 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
min(a,b)8 小时前
学习第 6 天:类型注解、装饰器与高级特性
python·学习
minglie18 小时前
线性电枢和分圆多项式
学习
汉堡包0018 小时前
【工具分享】--威胁情报平台大全
学习·安全·web安全·信息安全
旺仔学长 哈哈10 小时前
55384 消防安全教育与逃生演练小程序:知识学习、案例浏览和在线演练一站式实现
学习·小程序·消防教育·逃生演练
疯狂打码的少年10 小时前
【面向对象】面向对象概述:从“按步骤做”到“找谁来做”
笔记