如何用Python批量处理不同文件夹中的同名对应图片
问题分析与解决
原代码的核心问题有两个:
- 嵌套循环遍历两个文件夹的所有文件,不仅效率低下,而且直接比较完整文件路径永远不会相等(因为两张图分别在
images和labels文件夹下) - 冗余变量
num_2无实际作用
修正思路
只需要遍历其中一个文件夹的文件,提取每个文件的纯文件名,然后用这个文件名拼接另一个文件夹的路径,找到对应文件后再处理:
修正后的代码
import cv2 import os import glob # 定义文件夹路径 images_dir = 'C:/Users/Akash/Downloads/good/images' labels_dir = 'C:/Users/Akash/Downloads/good/labels' output_dir = 'C:/Users/Akash/Downloads/single_folder/output_images' # 确保输出文件夹存在,不存在则创建 os.makedirs(output_dir, exist_ok=True) num = 1 # 遍历images文件夹下的所有jpg文件 for img_path in glob.glob(os.path.join(images_dir, '*.jpg')): # 提取纯文件名(比如从"C:/xxx/abc.jpg"得到"abc.jpg") filename = os.path.basename(img_path) # 拼接labels文件夹下的对应文件路径 label_path = os.path.join(labels_dir, filename) # 检查labels文件夹中是否存在该文件 if os.path.exists(label_path): # 读取两张图片 img1 = cv2.imread(img_path) img2 = cv2.imread(label_path) # 执行按位与操作 dest_and = cv2.bitwise_and(img2, img1, mask=None) # 保存结果 output_path = os.path.join(output_dir, f'image_{num}.jpg') cv2.imwrite(output_path, dest_and) num += 1
关键改进点
- 使用
os.path.basename()提取纯文件名,实现跨文件夹的文件名匹配 - 用
os.path.join()拼接路径,避免手动拼接字符串出现的路径分隔符问题 - 添加
os.makedirs(output_dir, exist_ok=True)确保输出文件夹存在,防止保存失败 - 去掉冗余的嵌套循环和无效变量,代码更简洁高效
内容的提问来源于stack exchange,提问作者Akash Chakraborty
相关产品推荐
相关产品推荐

