Python 批量读取文件夹中图像

两种方法

一、用PIL库

import os
from PIL import Image


def read_images(folder_path):
    images = []
    for filename in os.listdir(folder_path):
        if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tif', '.tiff')):
            img_path = os.path.join(folder_path, filename)
            image = Image.open(img_path)
            images.append(image)
    return images


# 使用方法
folder_path = './aa'
images = read_images(folder_path)

二、用opencv库

import cv2
import os


def read_images(folder_path):
    images = []
    for filename in os.listdir(folder_path):
        if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tif', '.tiff')):
            img_path = os.path.join(folder_path, filename)
            image = cv2.imread(img_path)

            images.append(image)
    return images

# 使用方法同上
# 使用方法
folder_path = './aa'
images = read_images(folder_path)

三、说明

1.使用opencv和PIL读取图像的是不同的:使用opencv读取图像之后是BGR格式的,使用PIL读取图像之后是RGB格式的。

2.该代码可以批量读取文件夹中的图片,并逐一显示,图片名可以含中文。

图片名可含中文这一点对应代码为:image = cv2.imdecode(np.fromfile(filepath, dtype=np.uint8), -1)

cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式。

代码:

import cv2
import os
import glob
import numpy as np
def batch_imread_with_opencv(folder_path, extensions=['*.jpg', '*.png']):
    """
    使用OpenCV批量读取文件夹中的图片。

    :param folder_path: 文件夹路径
    :param extensions: 要读取的图片文件扩展名列表,例如 ['*.jpg', '*.png']
    :return: 图片列表(NumPy数组形式)
    """
    images = []
    for ext in extensions:
        # 使用glob模块查找所有匹配扩展名的文件
        for filepath in glob.glob(os.path.join(folder_path, ext)):
            # 读取图片
            #image = cv2.imread(filepath)
            image = cv2.imdecode(np.fromfile(filepath, dtype=np.uint8), -1)

            # 检查图片是否正确读取
            if image is not None:
                images.append(image)
    return images

# 使用方法
folder_path = './aa'  # 替换为你的图片文件夹路径
images = batch_imread_with_opencv(folder_path)

# 输出读取的图片数量
print(f"Loaded {len(images)} images from {folder_path}")

# 如果你需要处理这些图片,你可以在这里进行
# 例如,遍历所有图片并显示它们
for i, image in enumerate(images):
    cv2.imshow(f'Image {i+1}', image)
    cv2.waitKey(0)  # 等待用户按键
    cv2.destroyAllWindows()  # 关闭所有窗口

文件夹图像名:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/475306.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MES管理系统在生产计划与排产调度流程中的应用

在现代工业生产中,MES管理系统已经成为企业优化生产流程、提升生产效率的重要工具。MES管理系统在生产计划与排产调度中的具体应用,不仅能够帮助企业更好地控制生产过程,还能实现资源的合理配置,从而提高企业的整体竞争力。 首先&…

简单几点让你清楚VR全景制作方式,快来免费学习!

VR全景展示作为当下一种新型的宣传方式,能够有效解决商家企业的展示、宣传推广成本高的问题,也成为了实体门店获客引流的全新方式,助力行业实现低成本、高效率的宣传推广。 而从实际全景成品效果来看,不仅没有“美颜嫌疑”&#x…

蓝桥杯-模拟-航班时间

题目 思路 去时到达外地的时间-去时离开本地的时间 时区差时飞行时间 回时到达本地的时间-回时离开外地的时间 -时区差时飞行时间 故二者加起来即可得到飞行时间 代码 # 去时到达外地的时间-去时离开本地的时间 时区差时飞行时间 # 回时到达本地的时间-回时离开外地的时间 -…

初阶数据结构之---二叉树链式结构(二叉树的构建,二叉树的前序,中序,后序和层序遍历,计算二叉树结点个数,第k层结点个数,叶子结点个数,判断是否为完全二叉树)

引言 本篇博客是初阶数据结构树的收尾,将会讲掉基本二叉树链式结构的具体内容和实现,包括二叉树的构建,前序遍历,中序遍历,后序遍历和层序遍历,计算二叉树结点个数,第k层结点个数,二…

为什么高铁提前三分钟停止检票?

为什么高铁提前三分钟停止检票? 高铁,作为现代交通方式的代表,以其高速、便捷、舒适的特点受到了广大乘客的青睐。然而,在乘坐高铁的过程中,乘客们可能会遇到一个问题:为什么高铁会提前三分钟停止检票呢&a…

Vue.js+SpringBoot开发服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

Redis 又双叒叕改开源协议了,微软提前推出高性能替代方案 Garnet

Redis 官宣:是的,我们又改开源协议了 3 月 20 号,Redis 商业公司 CEO Rowan Trollope 在公司官方博客上宣布了一项重大变革。Redis 核心软件将从 BSD 3-Clause 许可证过渡到双重许可证模式,这一变化将从 Redis v7.4 版本开始&…

Java 应用程序监控

Java 监控涉及监控在 Java 上运行的应用程序的关键性能指标,以及 支持 Java 应用程序的服务器。Java 监控可以帮助优化 Java 应用程序的性能,发现和识别以下问题: 导致常见的应用程序问题,并在问题影响最终用户之前解决问题。 Ja…

美联储3月会议来袭,市场对6月开启降息或仍较为乐观

KlipC报道:美国联邦储备委员会结束了为期两天的货币政策会议,宣布仍继续将联邦基金利率目标区间维持在5.25%-5.50%之间不变。 值得一提的是会议声明声明几乎只字未改,唯一改动的是在描述就业市场时,将“新增就业过去一年有所放缓但…

解决Oracle VM VirtualBox无法与Windows互相复制粘贴的教程

说明:要实现从Windows上复制然后在VM VirtualBox上粘贴,必须要在VM VirtualBox上下载virtualbox-guest-dkms 第一步: 第二步: 按CtrlALTT打开命令终端输入 sudo apt-get install virtualbox-guest-dkms 然后重启 第三步&…

Linux下QT界面小程序开发

背景:需要在linux不同环境下可以测试我们的读卡器设备 搭建本地linux开发环境(本来想VS里开发然后通过SSH的方式在linux下编译,但是工具链一直没搞起来,所以我是在ubuntu里安装的QT Creator工具直接开发的)&#xff1b…

(一)手把手教你如何通过ARM DesignStart计划在FPGA上搭建一个Cortex-M3软核

(一)手把手教你如何通过ARM DesignStart计划在FPGA上搭建一个Cortex-M3软核 一、ARM DesignStart计划 1.1 如何下载ARM DesignStart Cortex-M3相关文件 ​ 关于ARM DesignStart计划的介绍:ARM DesignStart计划——私人定制一颗ARM处理器 - 知乎 (zhih…

Android ViewPager不支持wrap_content的原因

文章目录 Android ViewPager不支持wrap_content的原因问题源码分析解决 Android ViewPager不支持wrap_content的原因 问题 <androidx.viewpager.widget.ViewPagerandroid:id"id/wrap_view_pager"android:layout_width"match_parent"android:layout_he…

快速画流程图

使用在线工具&#xff1a;PlantUML PlantUML 官网:https://plantuml.com/ 中文官网:https://plantuml.com/zh/ 使用步骤如下&#xff1a; 1、拷贝一个完成函数&#xff1a; int func_init(const char *tag) {if (tag ! NULL) {printf("set TAG :%s", tag);}print…

登录校验:JWT令牌、Filter、Interceptor

JWT&#xff1a; 全称&#xff1a;JSON Web Token 定义了一种简洁的、自包含的格式&#xff0c;用于在通信双方以json数据格式安全的传输信息&#xff0c;由于数字签名的存在&#xff0c;这些信息是可靠的。 组成&#xff1a; Header(头部)&#xff1a;&#xff08;“alg&q…

每日学习笔记:C++ STL 的set、multiset

定义 (自动排序&#xff0c;可指定自定义排序准则) 排序准则 特点 &#xff08;不同通过迭代器直接修改元素值&#xff0c;只能先删除后添加&#xff09; 操作函数 运行期指定排序准则

【项目实践】VS配置Qt

文章目录 前言版本使用具体步骤1&#xff09;安装Qt或者添加删除组件2&#xff09;VS安装Qt Visual Studio Tools 如何使用遇到的问题双击ui文件编辑报错 前言 最近因为一个项目&#xff0c;需要使用Qt&#xff0c;本来想使用Python的&#xff0c;但是由于另外一个第三方的库是…

Linux:vim编辑器的使用

1.Vim的安装 Linux默认是安装了的vim&#xff0c;未安装则可以使用以下指令安装。 yum install vim -y 2.Vim的四种模式 &#xff08;1&#xff09;命令模式 使用VIM编辑器时&#xff0c;默认处于命令模式。在该模式下可以移动光标位置&#xff0c;可以通过快捷键对文件内容…

路灯单灯控制器 智慧路灯杆智能照明新宠

路灯单灯控制器是现代城市管理中非常重要的设备之一。它们不仅可以提供照明功能&#xff0c;还可以通过智能控制系统实现远程监控和调节。   路灯单灯控制器通过感知环境亮度和运行状态&#xff0c;实现对路灯的智能控制。它使用先进的传感器技术&#xff0c;能够实时感知路灯…

von Mises-Fisher Distribution

1. 概率密度函数 关于 Bessel Function 请参阅《贝塞尔函数》《Modified Bessel Function of the First Kind》。 2. Relation to Normal Distribution 进一步的推导&#xff1a; G p ( x ; μ , κ ) ( κ 2 π ) p e x p ( − κ ( x − μ ) ⊺ ( x − μ ) 2 ) ( κ 2 π…