[Image-SIG] Reading a 8bit Tif image from ArcMAP doesnt read well

Fredrik Lundh fredrik at pythonware.com
Tue Nov 9 09:34:47 CET 2010


On Thu, Oct 28, 2010 at 6:56 PM, German Ocampo <gerocampo at gmail.com> wrote:

> The issue is that using PIL I get pixel values in the greyscale of 127
> or rgb(0,0,0), where really I could see in Gimp that these pixels have
> a different value. Looks like PIL can decode part of the picture and
> another part of the picture not.

Chris already asked you about this, but I'm asking again -- what are
you doing that returns both greyscale and rgb values from the same
image?

What's the mode of this image, btw?  Maybe the confusion here is that
it's a palette image (i.e. each 8-bit pixel value is an index into a
colour table), and you're working on the index values instead of the
colour values.

Try replacing your code with

   im = Image.open(file_tif)
   im = im.convert("L") # or "RGB" if you want full color
   values = numpy.asarray(im)

and see if the resulting array makes more sense.

</F>

> Also I tried today to read the pixel values of the picture using
> temp=np.array(im) but still I got  some cells with a value of 127
> where really the image has different values.
>
> The only way to decode the picture was using freeImagepy, opening the
> image with freeImagepy, saving and then open again with PIL to get the
> values. It works but not in the way that supose to be. I want to do
> all with PIL :-)
>  (Attached is the code)
>
> Many thanks
>
> German
>
>    from PIL import Image
>    from PIL import TiffImagePlugin
>    import numpy as np
>    import sys
>    import FreeImagePy
>    FIPY = FreeImagePy.freeimage()
>    image = FIPY.genericLoader(file_tif)
>    FIPY.Save(FreeImagePy.FIF_TIFF, image, "temp.tif")
>
>   im = Image.open("temp.tif")
>   values=np.zeros((size_y,size_x))
>   mode=im.mode
>   temp=list(im.getdata())
>   cont=-1
>   list_colors=[]
>   for i in range(0,size_y):
>       for j in range(0,size_x):
>           cont+=1
>           if mode=="RGB":
>               color=temp[cont]
>               print cont,temp[cont]
>               if color in list_colors:
>                   index=list_colors.index(color)
>                   values[i][j]=index+1
>               else:
>                   list_colors.append(color)
>                   values[i][j]=len(list_colors)
>           else:
>               values[i][j]=temp[cont]
>
> On Thu, Oct 28, 2010 at 4:26 PM, Chris Mitchell <chris.mit7 at gmail.com> wrote:
>> Why would the image go between greyscale and rgb?  In anycase, perhaps
>> the easiest solution is use np.resize on temp instead of the for
>> loops.  Then if you have tuples of rgb versus ints you can use
>> np.where()
>>
>> On Thu, Oct 28, 2010 at 4:36 AM, German Ocampo <gerocampo at gmail.com> wrote:
>>> Good morning
>>>
>>> Im reading an 8bit image generated by ArcMap using PIL in windows, the
>>> image load well without error messages but, when I try to extract the
>>> values to a numpy array I got some lines of the image with value of
>>> pixel 127 (greyscale) or rgb(0,0,0). When I open the image using GIMP
>>> or arcmap  I could see that the image is complete.
>>>
>>> Any idea of what is happening??
>>>
>>> the code that I'm using for read the image is:
>>>
>>>     from PIL import Image
>>>     from PIL import TiffImagePlugin
>>>    import numpy as np
>>>    import sys
>>>    im = Image.open(file_tif)
>>>    values=np.zeros((size_y,size_x))
>>>    mode=im.mode
>>>    temp=list(im.getdata())
>>>    cont=-1
>>>    list_colors=[]
>>>    for i in range(0,size_y):
>>>        for j in range(0,size_x):
>>>            cont+=1
>>>            if mode=="RGB":
>>>                color=temp[cont]
>>>                print cont,temp[cont]
>>>                if color in list_colors:
>>>                    index=list_colors.index(color)
>>>                    values[i][j]=index+1
>>>                else:
>>>                    list_colors.append(color)
>>>                    values[i][j]=len(list_colors)
>>>            else:
>>>                values[i][j]=temp[cont]
>>>
>>> Best regards
>>>
>>> German
>>> _______________________________________________
>>> Image-SIG maillist  -  Image-SIG at python.org
>>> http://mail.python.org/mailman/listinfo/image-sig
>>>
>>
> _______________________________________________
> Image-SIG maillist  -  Image-SIG at python.org
> http://mail.python.org/mailman/listinfo/image-sig
>


More information about the Image-SIG mailing list