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

Python对两个文件夹对应图片执行按位运算 Colab代码无输出如何解决

问题原因及修正方案

原有代码的核心问题

  • 配对逻辑错误:folder1的文件名是img1.jpg,folder2的文件名是img_1.jpg,二者名称不相等,if filename == filename2判断永远不成立,所以不会执行任何运算逻辑,自然无输出
  • 双重循环冗余:不需要遍历两个文件夹做匹配,按序号对应规则直接生成配对路径即可,效率更高
  • 函数使用错误:不存在make_dir函数,应该用os.makedirs创建目录,且需要提前创建目录,不能在路径拼接中直接嵌套cv2.imwrite(该函数返回布尔值,无法作为路径参数使用)
  • 保存逻辑错误:所有结果都写入同一个filename.jpg,会导致文件被覆盖,且未指定正确的保存路径
  • 遗漏Drive挂载步骤:Colab中访问Google Drive内的文件,需要先执行挂载操作

修正后可运行代码

import os
import cv2
import pathlib
from google.colab import drive
from google.colab.patches import cv2_imshow

# 先挂载Google Drive,运行后按提示授权即可
drive.mount('/content/drive')

folder1 = pathlib.Path("/content/drive/MyDrive/Healthy")
folder2 = pathlib.Path("/content/drive/MyDrive/mask_Healthy")
save_dir = "./segmented/seg"
# 提前创建保存目录
os.makedirs(save_dir, exist_ok=True)

# 获取folder1下所有jpg文件,按序号排序
folder1_imgs = sorted([f for f in os.listdir(folder1) if f.endswith('.jpg')], key=lambda x:int(x.split('.')[0].replace('img','')))

for img1_name in folder1_imgs:
    # 提取序号生成folder2对应的文件名
    num = img1_name.split('.')[0].replace('img','')
    img2_name = f"img_{num}.jpg"
    img2_path = os.path.join(folder2, img2_name)
    # 校验对应文件是否存在
    if not os.path.exists(img2_path):
        print(f"配对文件{img2_name}不存在,跳过")
        continue
    
    # 读取处理图片
    img1 = cv2.imread(os.path.join(folder1, img1_name), cv2.IMREAD_UNCHANGED)
    img1 = cv2.resize(img1, (224, 224))
    img2 = cv2.imread(img2_path, cv2.IMREAD_UNCHANGED)
    img2 = cv2.resize(img2, (224, 224))
    
    # 按位与运算
    dest_and = cv2.bitwise_and(img2, img1, mask=None)
    # 显示结果
    cv2_imshow(dest_and)
    # 保存结果到指定路径
    save_path = os.path.join(save_dir, f"seg_{img1_name}")
    cv2.imwrite(save_path, dest_and)
    print(f"结果已保存到{save_path}")

内容的提问来源于stack exchange,提问作者Himali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:36:04