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,提升代码跨平台兼容性。
相关推荐
进阶小白猿5 小时前
Java技术八股学习Day36
学习
四维碎片7 小时前
【Qt】UDP跨平台调试工具
qt·学习·udp
好奇龙猫7 小时前
【人工智能学习-AI入试相关题目练习-第十八次】
人工智能·学习
程序员辣条7 小时前
AI产品经理:2024年职场发展的新机遇
人工智能·学习·职场和发展·产品经理·大模型学习·大模型入门·大模型教程
wanping158259923418 小时前
AI Agent(学习六-FAISS 持久化到磁盘(重启不丢记忆))
人工智能·学习·faiss
童话名剑8 小时前
序列模型与集束搜索(吴恩达深度学习笔记)
人工智能·笔记·深度学习·机器翻译·seq2seq·集束搜索·编码-解码模型
知识分享小能手8 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
鄭郑9 小时前
STM32学习笔记--I2C封装与OLED(2026.2.1)
笔记·stm32·学习
酒鼎10 小时前
学习笔记(4)HTML5新特性(第3章)- WebSocket
笔记·学习·html5
-Springer-10 小时前
STM32 学习 —— 个人学习笔记2-2(新建工程)
笔记·stm32·学习