imgcompare不支持列表?按索引逐一比对两个图片列表的问题
解决imgcompare按索引逐一比对列表中图片的问题
嘿,我来帮你搞定这个图片比对的需求!你现在的问题主要有两个小细节需要调整:一是图片路径的完整性,二是循环遍历两个列表的正确方式,咱们一步步来解决:
第一步:先确保存储完整的图片路径
你之前用os.listdir获取的只是文件名,直接传给imgcompare.is_equal的话,程序大概率找不到图片文件(因为它会在当前工作目录找,而不是你的目标目录)。所以先把列表改成存储完整路径:
import os import imgcompare myPath = "你的第一个图片目录路径" myPath2 = "你的第二个图片目录路径" listIm1 = [] for filename in os.listdir(myPath): if filename.endswith(".png"): # 拼接目录和文件名,得到完整路径 full_img_path = os.path.join(myPath, filename) listIm1.append(full_img_path) listIm2 = [] for filename2 in os.listdir(myPath2): if filename2.endswith(".png"): full_img_path2 = os.path.join(myPath2, filename2) listIm2.append(full_img_path2)
第二步:按索引逐一比对图片
接下来要实现同索引图片的比对,最直观的方式是用zip()同时遍历两个列表的对应元素,搭配enumerate()还能拿到当前比对的组号:
# 遍历两个列表的对应图片(默认只遍历到较短列表的长度) for group_num, (img1, img2) in enumerate(zip(listIm1, listIm2), start=1): try: # 调用imgcompare的is_equal方法比对 is_same = imgcompare.is_equal(img1, img2) print(f"第 {group_num} 组图片: {'完全相同' if is_same else '存在差异'}") except Exception as e: # 处理可能的异常(比如图片损坏、路径错误等) print(f"第 {group_num} 组图片比对失败: {str(e)}")
额外处理:两个列表长度不一致的情况
如果你的两个目录里的PNG数量不一样,zip()只会遍历到较短的那个列表就停止。要是想处理这种情况,可以用itertools.zip_longest(),它会把缺失的元素补为None,我们可以针对性处理:
from itertools import zip_longest for group_num, (img1, img2) in enumerate(zip_longest(listIm1, listIm2), start=1): if img1 is None: print(f"第 {group_num} 组: 第一个目录没有对应图片") continue if img2 is None: print(f"第 {group_num} 组: 第二个目录没有对应图片") continue try: is_same = imgcompare.is_equal(img1, img2) print(f"第 {group_num} 组图片: {'完全相同' if is_same else '存在差异'}") except Exception as e: print(f"第 {group_num} 组图片比对失败: {str(e)}")
这样就能完美实现你想要的“按相同索引逐一比对两个列表中图片”的需求啦!
内容的提问来源于stack exchange,提问作者mario Letterman
相关产品推荐
相关产品推荐

