Pynote

Python、機械学習、画像処理について

Pillow (PIL) - ImageEnhance モジュールで画像の明るさ、コントラストなどを変更する方法

概要

Pillow (PIL) の ImageEnhance モジュールで画像の明るさ、コントラストなどを変更する方法を紹介する。

カラーバランスを調整する。

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image, ImageEnhance

img = Image.open("sample.jpg")

enhancer = ImageEnhance.Color(img)

params = np.linspace(0.2, 2.0, 9)

fig = plt.figure(figsize=(10, 10))
for i, p in enumerate(params, 1):
    dst = enhancer.enhance(p)

    ax = fig.add_subplot(3, 3, i)
    ax.imshow(np.array(dst))
    ax.set_axis_off()
    ax.set_title(f"factor={p:.2f}")

plt.show()


コントラストを調整する。

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image, ImageEnhance

img = Image.open("sample.jpg")

enhancer = ImageEnhance.Contrast(img)

params = np.linspace(0.2, 2.0, 9)

fig = plt.figure(figsize=(10, 10))
for i, p in enumerate(params, 1):
    dst = enhancer.enhance(p)

    ax = fig.add_subplot(3, 3, i)
    ax.imshow(np.array(dst))
    ax.set_axis_off()
    ax.set_title(f"factor={p:.2f}")

plt.show()


明るさを調整する。

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image, ImageEnhance

img = Image.open("sample.jpg")

enhancer = ImageEnhance.Brightness(img)

params = np.linspace(0.2, 2.0, 9)

fig = plt.figure(figsize=(10, 10))
for i, p in enumerate(params, 1):
    dst = enhancer.enhance(p)

    ax = fig.add_subplot(3, 3, i)
    ax.imshow(np.array(dst))
    ax.set_axis_off()
    ax.set_title(f"factor={p:.2f}")

plt.show()


シャープネスを調整する。

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image, ImageEnhance

img = Image.open("sample.jpg")

enhancer = ImageEnhance.Sharpness(img)

params = np.linspace(0.1, 5.0, 9)

fig = plt.figure(figsize=(10, 10))
for i, p in enumerate(params, 1):
    dst = enhancer.enhance(p)

    ax = fig.add_subplot(3, 3, i)
    ax.imshow(np.array(dst))
    ax.set_axis_off()
    ax.set_title(f"factor={p:.2f}")

plt.show()


減色する。

method 引数で減色に使用するアルゴリズムを指定する。

  • 0: median cut
  • 1: maximum coverage
  • 2: fast octree
from IPython.display import display
from PIL import Image

img = Image.open("sample.jpg")

dst = img.quantize(colors=10, method=0)
display(dst)

dst = img.quantize(colors=10, method=1)
display(dst)

dst = img.quantize(colors=10, method=2)
display(dst)

dst = img.quantize(kmeans=10)
display(dst)