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,提升代码跨平台兼容性。
相关推荐
1104.北光c°1 小时前
滑动窗口HotKey探测机制:让你的缓存TTL更智能
java·开发语言·笔记·程序人生·算法·滑动窗口·hotkey
默默开发2 小时前
完整版:本地电脑 + WiFi 搭建 AI 自动炒股 + 自我学习系统
人工智能·学习·电脑
for_ever_love__2 小时前
Objective-C学习 NSSet 和 NSMutableSet 功能详解
开发语言·学习·ios·objective-c
炎爆的土豆翔8 小时前
OpenCV 阈值二值化优化实战:LUT 并行、手写 AVX2 与 cv::threshold 性能对比
人工智能·opencv·计算机视觉
Westward-sun.10 小时前
OpenCV 实战:银行卡号识别系统(基于模板匹配)
人工智能·opencv·计算机视觉
盐水冰10 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
Hello小赵10 小时前
视频压缩编码学习(一)—— 基础知识大集合
学习
左左右右左右摇晃10 小时前
计算机网络笔记整理
笔记·计算机网络
不吃西红柿的8510 小时前
[职场] 内容运营求职简历范文 #笔记#职场发展
笔记·职场和发展·内容运营
似水明俊德11 小时前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net