【Python/OpenCV】k平均法で減色処理

この記事では、Python版OpenCVのcv2.kmeansでk平均法を実装し、画像の色を減らす(多値化)方法をソースコード付きで解説します。

k平均法で減色処理

k-means法はクラスター分析手法の1つです。
画像処理では、色数を減らすのに利用されます。
例えばクラスタ数N=10でk平均法を実行すれば、画像の色数は10個になります。(10値化)
原理については「【k-means法】クラスタリングのアルゴリズム」で紹介しています。

今回はこれをPython+OpenCVで実装してみました。

ソースコード(Python3+OpenCV3)

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import cv2
import numpy as np

# 減色処理
def sub_color(src, K):

    # 次元数を1落とす
    Z = src.reshape((-1,3))

    # float32型に変換
    Z = np.float32(Z)

    # 基準の定義
    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)

    # K-means法で減色
    ret, label, center = cv2.kmeans(Z, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)

    # UINT8に変換
    center = np.uint8(center)

    res = center[label.flatten()]

    # 配列の次元数と入力画像と同じに戻す
    return res.reshape((src.shape))


def main():

    # 入力画像とスクリーントーン画像を取得
    img = cv2.imread("input.jpg") 

    # 減色処理(三値化)
    dst = sub_color(img, K=3)
    
    # 結果を出力
    cv2.imwrite("output.jpg", dst)


if __name__ == '__main__':
    main()

実行結果

サンプルプログラムの実行結果です。
■入力画像(左)と出力画像(右)

おすすめ記事
1 PythonでOpenCV入門 サンプル集
2 【Python】画像処理プログラミング入門
3 【画像処理入門】アルゴリズム&プログラミング
関連記事

コメント

  1. […] OpenCV減色処理:【Python/OpenCV】k平均法で減色処理 […]