首页 > 解决方案 > ValueError('只知道如何处理PNG;安装了Pillow'',Matplotlib可以处理更多的图像')

问题描述

我是 Python 新手,我正在尝试将一系列图像加载为数组。所有图像都在同一个文件夹中。

这是我正在使用的代码。

import os
from os import listdir
from matplotlib import image, pyplot

loaded_images = list()
for filename in listdir('UFO-120/train_val/lrd'):
    # load image
    lr_train_data = image.imread(filename, format='JPG')
    # store loaded image
    loaded_images.append(lr_img_data)
    print('> loaded %s %s' % (filename, lr_train_data.shape))

这是整个错误消息。

FileNotFoundError                         Traceback (most recent call last)

<ipython-input-4-81fe8e3a7102> in <module>()
6 for filename in listdir('UFO-120/train_val/lrd'):
7         # load image
----> 8         lr_train_data = image.imread(filename, format='JPG')
9         # store loaded image
10         loaded_images.append(lr_img_data)

1 frames

/usr/local/lib/python3.6/dist-packages/matplotlib/image.py in imread(fname, format)
1462             raise ValueError('Only know how to handle PNG; with Pillow '
1463                              'installed, Matplotlib can handle more images')
-> 1464         with Image.open(fname) as image:
1465             return pil_to_array(image)
1466     from matplotlib import _png

/usr/local/lib/python3.6/dist-packages/PIL/Image.py in open(fp, mode)
2807 
2808     if filename:
-> 2809         fp = builtins.open(filename, "rb")
2810         exclusive_fp = True
2811 

FileNotFoundError: [Errno 2] No such file or directory: 'set_o406.jpg'

该错误似乎告诉我所有文件都需要具有 .png 文件扩展名,但我认为使用 matplotlib image.imread 可以解决该问题。我还添加了 format='JPG' 声明,但这并没有什么不同。

至于文件未找到错误,“set_o406.jpg”是文件夹中的有效文件名。

该文件夹确实包含 1500 张图像,并且“set_o406.jpg”是 #754/1500,我是否可能超出了可以加载到单个数组中的内存?如果是这样,你能推荐一种解决方法吗?

我将不胜感激您能够提供的任何帮助。谢谢你。

标签: pythonarraysimage

解决方案


我已经运行了代码并发现了问题。因此,我根据该对您的程序进行了一些修改:-

第一次修改:- 将目录的路径添加到变量imgDir

第二次修改:-用imgDir+filename替换文件名。因此,您的程序可以找到您的文件。如果没有其目录的路径,您将无法找到该文件。

第三次修改:-你犯了一个愚蠢的错误,而不是写

loaded_images.append(lr_train_data)

你写了

loaded_images.append(lr_img_data)

所以,最后你的代码看起来像这样: -

import os
from os import listdir
from matplotlib import image, pyplot

imgDir = 'UFO-120/train_val/lrd/'

loaded_images = list()
for filename in listdir(imgDir):
    # load image
    lr_train_data = image.imread(imgDir+filename, format='JPG')
    # store loaded image
    loaded_images.append(lr_train_data)
    print('> loaded %s %s' % (imgDir+filename, lr_train_data.shape))

推荐阅读