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?

tahoar
  • 1,788
  • 3
  • 20
  • 36
  • 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 '11 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 '11 at 05:40

2 Answers2

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)  
Community
  • 1
  • 1
tahoar
  • 1,788
  • 3
  • 20
  • 36
2

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

pajton
  • 15,828
  • 8
  • 54
  • 65