user1299784 user1299784 - 3 months ago 18
Python Question

Scipy: UnicodeDecodeError while loading image file

def image_to_laplacian(filename):
with open(filename, 'r', encoding="latin-1") as f:
s = f.read()
img = sc.misc.imread(f)
image_to_laplacian('images/bw_3x3.png')


Produces:


UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte


"images/bw_3x3.png" is a 3x3 image I produced in Pinta. I tried opening a cat.jpg I got from Google Images, but I got the same error.

I also tried to use
"encoding="latin-1"
as an argument to open, based on something I read on SO; I was able to open the file, but I'm
read failed with the exception


OSError: cannot identify image file <_io.TextIOWrapper name='images/bw_3x3.png' mode='r' encoding='latin-1'>

Answer

The line that is causing the error is

s = f.read()

In 'r' mode this tries to read the data as a string, but it's a image file, so it will fail. You can use 'rb' instead. Definitely remove the encoding=latin because that's only relevant for text files.

Also, note that according to the documentation:

name : str or file object

The file name or file object to be read.

So you can dispense with opening a file and just give it a filepath as a string. The following should work:

img = sc.misc.imread(filename)
Comments