Image.open() cannot identify image file - Python?

PythonPython Imaging-Library

Python Problem Overview


I am running Python 2.7 in Visual Studio 2013. The code previously worked ok when in Spyder, but when I run:

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

I end up with the following errors:

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

Why is it so and how may I fix it?


As suggested, I have used the Pillow installer to my Python 2.7. But weirdly, I end up with this:

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

All fail!

Python Solutions


Solution 1 - Python

I had a same issue.

from PIL import Image

instead of

import Image

fixed the issue

Solution 2 - Python

So after struggling with this issue for quite some time, this is what could help you:

from PIL import Image

instead of

import Image

Also, if your Image file is not loading and you're getting an error "No file or directory" then you should do this:

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

and then open the file

image=Image.open(path)

Solution 3 - Python

In my case.. I already had "from PIL import Image" in my code.

The error occurred for me because the image file was still in use (locked) by a previous operation in my code. I had to add a small delay or attempt to open the file in append mode in a loop, until that did not fail. Once that did not fail, it meant the file was no longer in use and I could continue and let PIL open the file. Here are the functions I used to check if the file is in use and wait for it to be available.

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)

Solution 4 - Python

first, check your pillow version

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

I use pip install --upgrade pillow upgrade the version from 2.7 to 2.9(or 3.0) fixed this.

Solution 5 - Python

In my case, the image was corrupted during download (using wget with github url)

  • Try with multiple images from different sources. python

    from PIL import Image Image.open()

Solution 6 - Python

In my case, it was because the images I used were stored on a Mac, which generates many hidden files like .image_file.png, so they turned out to not even be the actual images I needed and I could safely ignore the warning or delete the hidden files. It was just an oversight in my case.

Solution 7 - Python

Just a note for people having the same problem as me. I've been using OpenCV/cv2 to export numpy arrays into Tiffs but I had problems with opening these Tiffs with PIL Open Image and had the same error as in the title. The problem turned out to be that PIL Open Image could not open Tiffs which was created by exporting numpy float64 arrays. When I changed it to float32, PIL could open the Tiff again.

Solution 8 - Python

If you are using Anaconda on windows then you can open Anaconda Navigator app and go to Environment section and search for pillow in installed libraries and mark it for upgrade to latest version by right clicking on the checkbox.

Screenshot for reference:enter image description here

This has fixed the following error:

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

Solution 9 - Python

Seems like a Permissions Issue. I was facing the same error. But when I ran it from the root account, it worked. So either give the read permission to the file using chmod (in linux) or run your script after logging in as a root user.

Solution 10 - Python

In my case there was an empty picture in the folder. After deleting the empty .jpg's it worked normally.

Solution 11 - Python

This error can also occur when trying to open a multi-band image with PIL. It seems to do fine with 4 bands (probably because it assumes an alpha channel) but anything more than that and this error pops out. In my case, I fixed it by using tifffile.imread instead.

Solution 12 - Python

In my case the image file had just been written to and needed to be flushed before opening, like so:

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

Solution 13 - Python

For anyone who make it in bigger scale, you might have also check how many file descriptors you have. It will throw this error if you ran out at bad moment.

Solution 14 - Python

For whoever reaches here with the error colab PIL UnidentifiedImageError: cannot identify image file in Google Colab, with a new PIL versions, and none of the previous solutions works for him:

Simply restart the environment, your installed PIL version is probably outdated.

Solution 15 - Python

For me it was fixed by downloading the image data set I was using again (in fact I forwarded the copy I had locally using vs-code's SFTP). Here is the jupyter notebook I used (in vscode) with it's output:

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)

output:

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

note that open always opens in r mode and even has a check to throw an error if that mode is changed.

Solution 16 - Python

Often it is because the image file is not closed by last program.

It should be better to use

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

Solution 17 - Python

In my case the error was caused by alpha channels in a TIFF file.

Solution 18 - Python

I had the same issue. In my case the image file size was 0(zero). Check the file size before opening the image.

fsize = os.path.getsize(fname_image)
if fsize > 0 :       
    img = Image.open(fname_image)
    #do something

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSibbs GamblingView Question on Stackoverflow
Solution 1 - PythonnaokoView Answer on Stackoverflow
Solution 2 - PythonmusicakcView Answer on Stackoverflow
Solution 3 - PythonpanofishView Answer on Stackoverflow
Solution 4 - PythoniamskView Answer on Stackoverflow
Solution 5 - Pythonrahul4dataView Answer on Stackoverflow
Solution 6 - Pythonpinkie pAIView Answer on Stackoverflow
Solution 7 - PythonJohan RView Answer on Stackoverflow
Solution 8 - PythonThinkFloydView Answer on Stackoverflow
Solution 9 - PythonAnoop SharmaView Answer on Stackoverflow
Solution 10 - PythonDavid K.View Answer on Stackoverflow
Solution 11 - PythonplpView Answer on Stackoverflow
Solution 12 - PythonjchmyzView Answer on Stackoverflow
Solution 13 - PythonDeilView Answer on Stackoverflow
Solution 14 - PythonJjangView Answer on Stackoverflow
Solution 15 - PythonCharlie ParkerView Answer on Stackoverflow
Solution 16 - PythonTrueView Answer on Stackoverflow
Solution 17 - PythonrhyView Answer on Stackoverflow
Solution 18 - PythonWangSungView Answer on Stackoverflow