こしあん
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

pandasでグループ別に統計量やヒストグラムを表示する方法... 初投稿です。この記事では、pandasでグループ別に基本統計量(describe)をする方法を紹介します。 テストデータ 以下のようなデータを想定します。ある学校の3つのクラスでテストをしてみました。 A組は40人、平均点は60点、標準偏差は10(分布は正規分布に従うものとする) B組は...
TPUでアップサンプリングする際にエラーを出さない方法... 画像処理をしているとUpsamplingが必要になることがあります。Keras/TensorFlowではUpsampling2Dというレイヤーを使ってアップサンプリングができますが、このレイヤーがTPUだとエラーを出すので解決法を探しました。自分でアップサンプリングレイヤーを定義するとうまく行った...
CIFAR-10/100のバイナリを画像ファイルに書き出す方法... CIFAR-10/100は画像分類として頻繁に用いられるデータセットですが、たまに画像ファイルでほしいことがあります。配布ページにはNumpy配列をPickleで固めたものがあり、画像ファイルとしては配布されていないので個々のファイルに書き出す方法を解説していきます。 コード まずは配布ページ...
pyplotの散布図グラフでマーカーに文字を使う方法... Pythonのグラフ(matplotlib.pyplot)で散布図をプロットする際に、マーカーに「a, b, c」のような文字を用いる方法を解説します。 コード import numpy as np import matplotlib.pyplot as plt np.random.seed...
Numpyの配列のみを操作して四角形を描画する(Numpyの画像処理)... Numpyの画像処理です。Numpyの配列のみを操作して、画面上に四角形を描画してみます。Numpyの画像処理は出力結果の合成のときにたまに使う割には若干独特なので注意が必要です。 Numpy arrayの画像の構造は(y, x, channel) ここだけ覚えておけば大丈夫です。Pillo...

Add a Comment

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