Skip to content Skip to sidebar Skip to footer

Typeerror: Unsupported Operand Type(s) For /: 'image' And 'int'

I wanted to convert the PIL Image object into a numpy array. I tried using the following codes it showing an error TypeError Traceback (most recent call last)

Solution 1:

In the function convert_pil_to_numpy_array(), the image variable used initially is different from the image variable that stores the cropped Image object.

from PIL import Image
image_path = "C:\\temp\\Capture.JPG"
image = Image.open(image_path)
print(type(image))
#Output
<class'PIL.JpegImagePlugin.JpegImageFile'>

This is a JpegImageFile object. If you look at the other image variable that stores the cropped image and is later passed to np.array, this variable is an object of the Image class:

image = image.crop((left_margin, upper_margin, right_margin, lower_margin))
print(type(image))
#Output:
<class'PIL.Image.Image'>

The problem lies in the tuple values passed to the crop() function. With the margin values that you passed to crop, the image could not be converted to an array and returned an Image object again:

image_arr = np.array(image)
print(image_arr)
#Output:
<PIL.Image.Imageimagemode=RGBsize=224x0at0x39E4F60>

As your image dimensions were different from mine, I used different values for the 4-tuple passed to crop() and got an array:

image = image.crop((50,100,60,120))
image_arr = np.array(image)
#Output:
  [[[-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]
  [-2.11790393 -2.03571429 -1.80444444]]..etc

What you should do is, check the margin values and save the cropped image to file(jpg, png, etc.) and then convert to array. Note that I am not storing the saved image to any variable. :

image.crop((50, 60, 100, 120)).save("test.jpg")
image_arr = np.array(Image.open("test.jpg")) / 255
mean = np.array([0.485, 0.456, 0.406])
std_dv = np.array( [0.229, 0.224, 0.225])
image_arr = (image_arr - mean)/std_dv
print(image_arr)
#Output:
  [[[-0.04580872  0.08263305  0.30448802]
  [-0.91917116 -0.81022409 -0.58440087]
  [ 0.81042898  0.95798319  1.17594771]
  ...
  [ 2.19753404  2.37605042  2.58771242]
  [-0.02868396 -0.19747899  0.13019608]
  [-0.11430773 -0.28501401  0.04305011]]
  ....etc.

Solution 2:

Now that you presented the real code you are actually using:

  • Image.open("path.jpg") returns <class 'PIL.JpegImagePlugin.JpegImageFile'>
  • after your cropping you get a return of <class 'PIL.Image.Image'>

If you inspect your cropped image, you can see it only has one dimension, the second is 0:

Debugger picture

If you fix your code to:

defconvert_pil_to_numpy_array(image_path):
    # Load Image an open the imagefrom PIL import Image

    image = Image.open(image_path)
    width = image.size[0]
    height = image.size[1] 

    image.thumbnail((500, 256) if (width > height) else (256, 500))  

    left_margin = (image.width - 224) / 2
    upper_margin = (image.height - 224) / 2# fixed
    lower_margin = upper_margin + 224# fixed
    right_margin = left_margin + 224# fixed and renamed so you do not overwrite image all the time - helps debugging# now this has 2 dimensions that are non-zero
    image_crop = image.crop((left_margin, upper_margin, right_margin, lower_margin))

    # normalize
    image_arr = np.asarray(image) / 255
    mean = np.mean(image_arr)
    std_dv = np.std( image_arr )
    image_arr = (image_arr - mean)/std_dv 

    return image_crop

the code suddenly runs without errors.

Solution 3:

This works:

from PIL import Image
import numpy as np

image = Image.open(r'C:\temp\2015-05-14 17.43.10.jpg') # path to existing local file
image_arr = np.asarray(image) / 255print(image_arr)

Output:

[[[ 0.35294118  0.39607843  0.41960784][ 0.38039216  0.42352941  0.44705882][ 0.41568627  0.45098039  0.47058824]
  ...,
  [ 0.05490196  0.04705882  0.05098039][ 0.04705882  0.03921569  0.04313725][ 0.04313725  0.03529412  0.03921569]]

 [[ 0.36470588  0.4         0.42745098][ 0.38823529  0.42352941  0.44313725][ 0.40784314  0.44313725  0.4627451 ]
  ..., etc ]

Post a Comment for "Typeerror: Unsupported Operand Type(s) For /: 'image' And 'int'"