如何用Python循环读取单文件夹内多张图片?代码报错求助
解决NameError报错并实现批量读取图片及独立操作
问题原因分析
你遇到的NameError: name 'imagenames_list' is not defined是因为变量名拼写错误:你定义的是imagenames__list(两个下划线),但后续代码里调用的是imagenames_list(一个下划线),Python会把它们识别成两个完全不同的变量,自然找不到后者。
除此之外,代码还有个逻辑问题:glob.glob('/content/drive/My Drive/Colab Notebooks/Asplab/Cifar/image31.png')指定的是单个图片文件路径,而非文件夹,后续嵌套循环查找/*.jpg根本找不到任何文件,也就无法获取你需要的5张图片路径。
修正后的完整代码
下面是修正了上述问题,并且实现“逐个读取图片并执行独立操作”的代码:
import cv2 import numpy as np import glob import pylab as plt # 修正:指定图片所在的文件夹路径,而非单个文件 image_folder = '/content/drive/My Drive/Colab Notebooks/Asplab/Cifar/' # 修正变量名拼写错误,获取文件夹内所有jpg格式图片(可根据实际后缀调整) imagenames_list = glob.glob(image_folder + '*.jpg') # 如果你的图片有多种格式(比如png、jpg),可以用下面的方式批量匹配 # imagenames_list = glob.glob(image_folder + '*.[jp][pn]g') # 初始化列表存储读取的图片 read_images = [] # 逐个读取图片并执行独立操作 for image_path in imagenames_list: # 以灰度模式读取图片 img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) if img is not None: # 确保图片读取成功,避免损坏图片影响后续流程 read_images.append(img) # 在这里添加对单张图片的独立操作,示例如下: print(f"已读取图片:{image_path.split('/')[-1]},尺寸:{img.shape}") # 示例:显示图片(Colab环境需要加上plt.show()才能正常显示) plt.imshow(img, cmap='gray') plt.title(image_path.split('/')[-1]) plt.axis('off') plt.show() # 你可以替换成自己需要的操作,比如边缘检测、特征提取等 else: print(f"警告:图片读取失败,请检查路径或文件完整性:{image_path}")
关键修正点说明
- 变量名统一:把拼写错误的
imagenames__list改成imagenames_list,确保变量的定义和调用完全一致。 - 路径修正:将目标路径改为图片所在的文件夹,让
glob能正确遍历出文件夹内的所有图片。 - 读取校验:添加
if img is not None的判断,避免因图片损坏或路径错误导致后续代码崩溃。 - 独立操作示例:在读取每张图片后,加入了打印图片信息、显示图片的示例,你可以直接替换成自己需要的业务操作。
内容的提问来源于stack exchange,提问作者Faheem Ur Rehman
相关产品推荐
相关产品推荐

