两种方法
一、用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() # 关闭所有窗口
文件夹图像名: