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
相关产品推荐
相关产品推荐

