How to reduce color palette with PIL

23,359

Solution 1

That's easy, just use the undocumented colors argument:

result = image.convert('P', palette=Image.ADAPTIVE, colors=5)

I'm using Image.ADAPTIVE to avoid dithering

Solution 2

I assume you want to do something more sophisticated than posterize. "Sampling" as you say, will take some finesse, as the 5 most common colors in the image are likely to be similar to one another. Maybe take a look at the 5 most separated peaks in a histogram.

Solution 3

The short answer is to use the Image.quantize method. For more info, see: How do I convert any image to a 4-color paletted image using the Python Imaging Library ?

Share:
23,359

Related videos on Youtube

Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I'm not sure how I would go about reducing the color palette of a PIL Image. I would like to reduce an image's palette to the 5 prominent colors found in that image. My overall goal is to do some basic color sampling.

  • Cosine
    Cosine over 10 years
    Thank you, that's wonderful. I've always hated the PIL documentation. How do you then convert it back? With image.convert("RGB", palette=Image.ADAPTIVE, colors=5) or something else?
  • unutbu
    unutbu about 10 years
    This is now documented under im.quantize.
  • c0dehunter
    c0dehunter over 8 years
    @unutbu, im.quantize is deprecated.