15

I have 8-bit greyscale TIFF images that I want to convert to Monochrome using a 75% white (decimal 190) threshold. In the Image.convert(mode) method section, the PIL manual says:

"When translating a greyscale image into a bitlevel image (mode "1"), all non-zero values are set to 255 (white). To use other thresholds, use the point method."

The Image.point(table) method says that it maps each pixel through the given table.

im.point(table, mode) => image
im.point(function, mode) => image

"Map the image through table, and convert it on fly. In the current version of PIL , this can only be used to convert 'L' and 'P' images to '1' in one step, e.g. to threshold an image."

How do I create the table (or function) that corresponds to the 75% threshold I need?

2
  • pajton's answer is the one you want. You use 190, but I would use p > 191 (I know, the difference is minor :).
    – tzot
    Jun 26, 2011 at 18:56
  • Thanks for the answers, but a funny thing happened on the way to implementation. My images actually start as TIFF,CCITT group4. I thought it would be easy to convert to 8-bit grey. However, PIL reports "decoder group4 not available". Is there another imaging library that supports group4?
    – tahoar
    Jun 27, 2011 at 5:40

2 Answers 2

18

I found the complete solution in this answer "Write TIFF file in python from String". The function must include "and 255"

threshold = 191  
im = im.point(lambda p: p > threshold and 255)  
2

Try im.point(lambda p: p > 190) and post the results.

1
  • As tahoar says above, you do seem to need the and 255
    – Ben
    May 10, 2012 at 13:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.