こしあん
2018-11-03

Pythonで画像のカラーヒストグラムを簡単に表示する方法


画像で赤、緑、青の画素がどのような分布になっているかという「カラーヒストグラム」を見たいことがあります。しかしいざ探すとツールが少ないのです。Pythonならほんの数行で出せます。

PillowとPyplotでとてもお手軽

カラーヒストグラムの原理は単純で、縦横カラーチャンネルの画像を、カラーチャンネル単位でヒストグラム出せばいいのです。画像の読み込みにPillow、ヒストグラムの表示にPyplot、画像データの受け渡しをNumpy配列でやっています。

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

def color_hist(filename):
    img = np.asarray(Image.open(filename).convert("RGB")).reshape(-1,3)
    plt.hist(img, color=["red", "green", "blue"], histtype="step", bins=128)
    plt.show()

これだけで終わりです。binsの刻みを変えるとヒストグラムの幅を指定することができます(現状は256段階を128個に分割)。具体例を見ていきましょう。

例えば猫ちゃんも



動画編集ソフトでよく見るようなカラーヒストグラムです

いらすとやも



イラスト系は特定の色に山が集中しやすいですね

名画ですら分析可能



モネの睡蓮の池です。シカゴ美術館からダウンロードしました。かなりきれいな分布をしているんですね。

以上です。簡単にカラーヒストグラムを出すことができました。

Related Posts

Python(Numpy)で画像を水平反転する方法:Data Augmentation向け... OpenCVを使わずに単純に画像を左右反転(水平反転)する方法を考えます。ディープラーニングでデータのジェネレーターを自分で実装した場合、Data Augmentationを組み込む際にも必要になります。それを見ていきましょう。 左右反転自体は実は簡単 例えばNumpyの行列を左右反転させてみ...
Kernel-PCAのexplained_variance_ratioを求める方法... scikit-learnのPCA(主成分分析)にはexplained_variance_ratio_という、次元を削減したことでどの程度分散(データを説明できる度合い)が落ちたのかを簡単に確認できる値があります。Kernel-PCAではカーネルトリックにより、特徴量の空間が変わってしまうので、ex...
Numpyだけでサクッと画像を拡大する方法... Numpyだけで画像をサクッと拡大する方法を紹介します。OpenCVやPillowを使うまでもないな、というようなときに便利な方法です。ニューラルネットワークでインプットのサイズを調整するときも使えます。 ただのNearest Neighbor法 拡大前の1ピクセルを1つの四角形と見立てて、拡...
TPUでアップサンプリングする際にエラーを出さない方法... 画像処理をしているとUpsamplingが必要になることがあります。Keras/TensorFlowではUpsampling2Dというレイヤーを使ってアップサンプリングができますが、このレイヤーがTPUだとエラーを出すので解決法を探しました。自分でアップサンプリングレイヤーを定義するとうまく行った...
pandasでグループ別に統計量やヒストグラムを表示する方法... 初投稿です。この記事では、pandasでグループ別に基本統計量(describe)をする方法を紹介します。 テストデータ 以下のようなデータを想定します。ある学校の3つのクラスでテストをしてみました。 A組は40人、平均点は60点、標準偏差は10(分布は正規分布に従うものとする) B組は...

Add a Comment

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