从路径列表中读取文件

时间:2019-10-26 01:48:25

标签: python image image-processing cv2

我已经下载了一个深度学习项目的数据集,其中包含图像(.png)和每个图像的对应标签(.txt)。我在列表x中拥有所有图像的路径。我想遍历这些路径,使用cv2预处理图像,然后将新图像附加到新列表images_data中。但是,每次尝试遍历它时,我都会不断遇到相同的错误:cv2.error: OpenCV(4.1.1) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

即使我注释掉引发错误的那行代码,在尝试调整图像大小时也会遇到另一个错误。

这是我用来遍历列表的for循环:

images_data = []
    for file in x:
        img = cv2.imread(file)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        img = cv2.resize(img, (80, 80))
        images_data.append(img)

我的x列表看起来像这样: x = [car1.png, car2.png, car3.png, car4.png, car5.png]

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

该错误表明您的img变量为空,因此cv2.imread(file)没有读取图像。您可以在读取图像之后,转换颜色或调整大小之前进行检查,使用一个简单的if情况:

if img is None: 
    print('Error reading image')
else:
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

或使用os模块检查文件是否存在:

img = cv2.imread(file)
if os.path.isfile(file): 
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
如果文件存在,

os.path.isfile(file)将返回True

我假设您的文件car1.png, car2.png等位于此脚本的不同文件夹中,并且不在同一路径中,在这种情况下,您需要将图像目录附加到文件名后才能读取它。因此,例如,如果您的图像位于'/home/Deep_Learning/Car_Images/'中,那么在读取图像时,变量file必须包含字符串/home/Deep_Learning/Car_Images/car1.png,用于第一个图像,而不仅仅是{ {1}}。您可以像这样使用python的car1.png模块来做到这一点:

os