61

我在 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

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


正如建议的那样,我在 Python 2.7 中使用了 Pillow 安装程序。但奇怪的是,我最终得到了这个:

>>> 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

都失败了!

4

17 回答 17

67

我有同样的问题。

from PIL import Image

代替

import Image

解决了这个问题

于 2013-12-31T21:02:15.480 回答
14

因此,在解决这个问题很长一段时间后,这可以帮助你:

from PIL import Image

代替

import Image

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

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

然后打开文件

image=Image.open(path)
于 2014-03-12T11:49:08.000 回答
9

就我而言..我的代码中已经有“from PIL import Image”。

发生错误是因为图像文件仍在我的代码中的先前操作使用(锁定)。我不得不添加一个小的延迟或尝试在循环中以附加模式打开文件,直到没有失败。一旦没有失败,这意味着该文件不再使用,我可以继续让 PIL 打开该文件。这是我用来检查文件是否正在使用并等待它可用的功能。

def is_locked(filepath):
    locked = None
    file_object = None
    if os.path.exists(filepath):
        try:
            buffer_size = 8
            # Opening file in append mode and read the first 8 characters.
            file_object = open(filepath, 'a', buffer_size)
            if file_object:
                locked = False
        except IOError as message:
            locked = True
        finally:
            if file_object:
                file_object.close()
    return locked

def wait_for_file(filepath):
    wait_time = 1
    while is_locked(filepath):
        time.sleep(wait_time)
于 2019-02-07T23:27:57.110 回答
7

首先,检查你的枕头版本

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

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

于 2015-11-13T06:25:40.457 回答
2

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

于 2019-07-07T19:16:58.807 回答
2

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

于 2020-03-15T12:26:36.283 回答
2

在我的情况下,图像在下载过程中损坏(使用 wget 和 github url)

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

    从 PIL 导入图像 Image.open()

于 2021-05-27T09:28:28.813 回答
1

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

截图供参考:在此处输入图像描述

这已修复以下错误:

PermissionError: [WinError 5] Access is denied: 'e:\\work\\anaconda\\lib\\site-packages\\pil\\_imaging.cp36-win_amd64.pyd'
于 2017-12-14T10:57:35.447 回答
1

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

于 2018-12-26T11:59:51.717 回答
1

就我而言,文件夹中有一张空图片。删除空的.jpg后,它工作正常。

于 2019-03-19T17:19:26.707 回答
1

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

应该更好用

with Image.open(file_path) as img:
    #do something
于 2021-05-27T08:29:07.250 回答
0

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

img_file.flush() 
img = Image.open(img_file.name))
于 2019-05-08T21:13:49.180 回答
0

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

于 2019-09-24T13:48:42.280 回答
0

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

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

于 2020-06-01T17:07:50.940 回答
0

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

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甚至在更改该模式时检查是否引发错误。

于 2020-07-01T16:46:38.673 回答
0

在我的情况下,错误是由 TIFF 文件中的 alpha 通道引起的。

于 2021-12-28T19:49:44.533 回答
0

尝试使用 PIL 打开多波段图像时也会发生此错误。它似乎对 4 个波段很好(可能是因为它假定一个 alpha 通道),但除此之外,这个错误就会弹出。就我而言,我改用 tifffile.imread 来修复它。

于 2022-01-24T22:40:22.097 回答