Python OpenCV3でポスタリゼーション(階調の変換)

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

画像の階調を変換する処理のことをポスタリゼーションという。

 

前提

ディレクトリ構成などはこことかこことか。

&nbsp

元画像

ガンマ変換などと比較しやすいために、同じこの画像(sora2.jpg)を使う。
以前の例だとsource/imageディレクトリ配下に設置する。

sora

 

ルックアップテーブル

ルックアップテーブルは以下の階段のようなグラフを使う。

 

スクリーンショット 2015-06-23 9.57.23

 

ポスタリゼーション

sourceディレクトリ配下にposterization.pyを作成する。
これまでと同様に事前にルックアップテーブルを作成し、OpenCV3のLUTメソッドの引数でルックアップテーブルを指定し、ポスタリゼーションを行う。

# -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == '__main__':

    # ルックアップテーブルを作成するため変数の定義
    solarization_const = 2 * np.pi / 255

    # ルックアップテーブルの生成
    """
    array([[0],
           [0],
           [0],
           [0],
           [0],
           [0],
           [0],
        ・・・・・・・・
           [0], dtype='uint8')
    のようなリストが生成される。
    """
    look_up_table = np.ones((256, 1), dtype = 'uint8' ) * 0

    for i in range(256):

        if i < 64:
        
          look_up_table[i][0] = 0

        elif i < 128:

          look_up_table[i][0] = 100

        elif i < 192:

          look_up_table[i][0] = 200

        else:

          look_up_table[i][0] = 300

    # 画像の読み込み
    img_src = cv2.imread("./image/sora2.jpg", 1)

    # ポスタリゼーション後の出力
    img_post = cv2.LUT(img_src, look_up_table)

    # 表示
    cv2.imshow("Show POSTERIZATION Image", img_post)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

実行してみる。

python posterization.py

スクリーンショット 2015-06-23 9.32.30

ペンキをぶちまけた現代芸術のような色。

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です