Image.open() не может идентифицировать файл изображения - Python?

Я запускаю Python 2.7 в Visual Studio 2013. Код ранее работал нормально, когда в 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

Все сбой!

Ответ 1

У меня была такая же проблема.

from PIL import Image

вместо

import Image

исправлена ​​проблема

Ответ 2

Итак, после долгой борьбы с этой проблемой, это поможет вам:

from PIL import Image

вместо

import Image

Кроме того, если ваш файл изображения не загружается, и вы получаете сообщение об ошибке "Нет файла или каталога", вы должны сделать следующее:

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

а затем откройте файл

image=Image.open(path)

Ответ 3

во-первых, проверьте вашу версию подушки

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

Я использую pip install --upgrade pillow обновить версию с 2.7 до 2.9 (или 3.0), чтобы исправить это.

Ответ 4

В моем случае.. У меня уже было "из PIL import Image" в моем коде.

Ошибка произошла для меня, потому что файл изображения все еще использовался (заблокирован) предыдущей операцией в моем коде. Мне пришлось добавить небольшую задержку или попытку открыть файл в режиме добавления в цикле, пока это не завершилось ошибкой. Как только это не сработало, это означало, что файл больше не использовался, и я мог продолжить и позволить PIL теперь открыть файл.

Ответ 5

В моем случае файл изображения был только что записан и его нужно было очистить перед открытием, вот так:

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

Ответ 6

Если вы используете Anaconda на окнах, вы можете открыть приложение Anaconda Navigator и перейти в раздел Среда и найти подушку в установленных библиотеках и отметьте его для обновления до последней версии, щелкнув правой кнопкой мыши на флажке.

Снимок экрана для справки: введите описание изображения здесь

Это устранило следующую ошибку:

PermissionError: [WinError 5] Access is denied: 'e:\\work\\anaconda\\lib\\site-packages\\pil\\_imaging.cp36-win_amd64.pyd'

Ответ 7

Похоже, проблема с разрешениями. Я столкнулся с той же ошибкой. Но когда я запустил его из учетной записи root, это сработало. Так что либо дайте разрешение на чтение файла с помощью chmod (в linux), либо запустите ваш скрипт после входа в систему как пользователь root.

Ответ 8

В моем случае это было потому, что используемые мной изображения были сохранены на Mac, который генерирует много скрытых файлов, таких как .image_file.png, поэтому они оказались даже не теми изображениями, которые мне нужны, и я мог спокойно проигнорировать предупреждение или удалить скрытые файлы. Это был просто недосмотр в моем случае.

Ответ 9

В моем случае в папке была пустая картинка. После удаления пустого .jpg все заработало нормально.

Ответ 10

Для любого, кто делает это в большем масштабе, вы также можете проверить, сколько файловых дескрипторов у вас есть. Она выдаст эту ошибку, если вы выбежали в плохой момент.