[Image-SIG] PIL 1.1.6 can't convert 16-bit (I; 16) to 8-bit ('L')--Windows 32-bit

Fredrik Lundh fredrik at pythonware.com
Tue Mar 2 22:42:12 CET 2010


PIL has very limited support for the I;16 and I;16L modes; it's
usually best to convert them to mode I (or F) and move on from there.
Try doing:

  im = im.convert("I")

before applying getextrema and point(lut, "L") to the image.

</F>

On Mon, Mar 1, 2010 at 4:50 AM, Karl Garsha <k.e.garsha at gmail.com> wrote:
> Greetings,
>
> I'm reading in a 16-bit monochrome image using PIL on windows and can't seem
> to work with the resulting image object.
>
> I've confirmed the image data is good..I can open and view it with ImageJ
> and the dimensions are correct.
>
> I'm using PIL 1.1.6 as part of the Enthought Python distribution...I'm
> stumped. I've appended relevant code I'm trying with my interpreter below:
>
> I'm hoping perhaps someone can help...I need to take 16-bit monochrome
> images (*.tiff in this case) and get them into 8-bit space...thanks in
> advance for any insight into what I can do to solve this.
>
> print im.mode,im.size
> I;16 (832, 656)
>
> print im.getextrema()
> None # this doesn't seem right....can PIL 1.1.6 apply this method to 16-bit
> unsigned int image objects?
>
> lut=[]
> len(lut)
> 0
> for i in range (65536):
>     lut.append(int(i/256))
>
> len(lut)
> 65536
>
> im3=im.point(lut,'L')
> Traceback (most recent call last):
>   File "<input>", line 1, in <module>
>   File "C:\Python26\lib\site-packages\PIL\Image.py", line 1109, in point
>     return self._new(self.im.point(lut, mode))
> ValueError: wrong number of lut entries
>
> _______________________________________________
> Image-SIG maillist  -  Image-SIG at python.org
> http://mail.python.org/mailman/listinfo/image-sig
>
>


More information about the Image-SIG mailing list