You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:50:26