Image.open()无法识别图像文件 - Python?

时间:2013-10-07 17:24:54

标签: python python-imaging-library

我在Visual Studio 2013中运行Python 2.7。代码以前在Spyder中运行正常,但是当我运行时:

import numpy as np
import scipy as sp
import math as mt
import matplotlib.pyplot as plt
import Image
import random

# (0, 1) is N
SCALE = 2.2666 # the scale is chosen to be 1 m = 2.266666666 pixels
MIN_LENGTH = 150 # pixels

PROJECT_PATH = 'C:\\cimtrack_v1'
im = Image.open(PROJECT_PATH + '\\ST.jpg')

我最终遇到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\cimtrack_v1\PythonApplication1\dr\trajgen.py", line 19, in <module>
    im = Image.open(PROJECT_PATH + '\\ST.jpg')
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 2020, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file

为什么会这样,我该如何解决?


正如所建议的,我已经将Pillow安装程序用于我的Python 2.7。但奇怪的是,我最终得到了这个:

>>> from PIL import Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL


>>> from pil import Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named pil

>>> import PIL.Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL.Image

>>> import PIL
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL

全部失败!

15 个答案:

答案 0 :(得分:65)

我有同样的问题。

from PIL import Image

而不是

import Image

解决了问题

答案 1 :(得分:15)

因此,经过一段时间的努力解决这个问题后,这可以帮到你:

from PIL import Image

而不是

import Image

此外,如果您的图片文件未加载,并且您收到错误“没有文件或目录”,那么您应该这样做:

path=r'C:\ABC\Users\Pictures\image.jpg'

然后打开文件

image=Image.open(path)

答案 2 :(得分:5)

首先,检查您的枕头版本

python -c 'import PIL; print PIL.PILLOW_VERSION'

我使用pip install --upgrade pillow升级版本从2.7到2.9(或3.0)修复此问题。

答案 3 :(得分:2)

以我为例。.我的代码中已经有“ from PIL import Image”。

对于我来说,发生错误是因为我的代码中的先前操作仍在使用(锁定)图像文件。我必须添加一个小的延迟,或者尝试以附加模式循环打开文件,直到没有失败为止。一旦没有失败,就意味着该文件不再使用,我可以继续让PIL现在打开该文件。

答案 4 :(得分:2)

在我的情况下,图像文件刚刚被写入并且需要在打开之前刷新,例如:

img_file.flush() 
img = Image.open(img_file.name))

答案 5 :(得分:1)

如果您在Windows上使用Anaconda,则可以打开 Anaconda Navigator 应用并进入环境部分并在已安装的库中搜索枕头并通过右键单击复选框将其标记为升级到最新版本。

参考屏幕截图:enter image description here

这解决了以下错误:

ds['month'] = [datetime.datetime(2017, month, 1) for month in ds['month'].values]
ds = ds.rename({'month': 'time'})

答案 6 :(得分:1)

似乎是一个权限问题。我面临着同样的错误。但是,当我从根帐户运行它时,它起作用了。因此,要么使用chmod(在Linux中)为文件授予读取权限,要么以root用户身份登录后运行脚本。

答案 7 :(得分:1)

在我的情况下,这是因为我使用的图像存储在Mac上,该Mac生成了许多隐藏文件,例如.image_file.png,因此它们甚至不是我需要的实际图像,因此我可以放心地忽略警告或删除隐藏的文件。就我而言,这只是一个疏忽。

答案 8 :(得分:1)

给与我有同样问题的人提供便条。 我一直在使用OpenCV / cv2将numpy数组导出到Tiff中,但是使用PIL Open Image打开这些Tiff时遇到了问题,并且出现了与标题相同的错误。 原来的问题是PIL Open Image无法打开通过导出numpy float64数组创建的Tiff。当我将其更改为float32时,PIL可以再次打开Tiff。

答案 9 :(得分:1)

通常是因为图像文件没有被上一个程序关闭。

应该更好用

with Image.open(file_path) as img:
    #do something

答案 10 :(得分:0)

在我的情况下,文件夹中有一张空白图片。删除空的.jpg后,它可以正常工作。

答案 11 :(得分:0)

对于任何使它更大规模的人,您可能还需要检查您拥有多少个文件描述符。如果您在糟糕的时刻用完了,将会抛出此错误。

答案 12 :(得分:0)

对于到达此处并在Google Colab中出现错误colab PIL UnidentifiedImageError: cannot identify image file且使用新的PIL版本的人,以前的解决方案都不适合他:

仅重新启动环境,您安装的PIL版本可能已过时。

答案 13 :(得分:0)

就我而言,图像在下载过程中损坏(使用 wget 和 github url)

  • 尝试使用来自不同来源的多个图像。 蟒蛇

    从 PIL 导入图像 图像.open()

答案 14 :(得分:-1)

对我来说,已通过再次下载使用的图像数据集进行了修复(实际上,我使用vs-code的SFTP转发了我在本地拥有的副本)。这是我在vscode中使用的jupyter笔记本的输出:

from pathlib import Path

import PIL
import PIL.Image as PILI
#from PIL import Image

print(PIL.__version__)

img_path = Path('PATH_UR_DATASET/miniImagenet/train/n03998194/n0399819400000585.jpg')
print(img_path.exists())
img = PILI.open(img_path).convert('RGB')

print(img)

输出:

7.0.0
True
<PIL.Image.Image image mode=RGB size=158x160 at 0x7F4AD0A1E050>

请注意,open始终以r模式打开,如果更改了该模式,它甚至会检查是否抛出错误。