【Python版OpenCV】cv2.calcHistで画像のヒストグラムを計算してグラフ化する方法

Python版OpenCVで画像のヒストグラムを求めたり濃度変換する方法をソースコード付きで解説します。

Python版OpenCVで画像のヒストグラムを作成

本ページの内容は以下動画でも解説しています。

画像のヒストグラムは、横軸が画素値(階調値)、縦軸は画素数の2次元グラフです。
つまり、「画像中にある画素値をもつ画素は何個あるのか」を示します。

画像データのヒストグラムとは?形状や山の見方を解説
写真等の画像データのヒストグラムとは?形状や山の見方を解説します。

今回は、Python版OpenCVを用いて画像のヒストグラムを求めてみました。
ヒストグラムの計算部分は以下の2種類の方法で実装してみました。

方法①・・・NumPyの「numpy.histogram」を使用
方法②・・・OpenCVの「cv2.calcHist」を使用

書式①

hist, bins = np.histogram(src.ravel(),256,[0,256])
パラメータ名 説明
src 入力画像(1チャンネル)
hist ヒストグラムのデータ(1次元配列)

書式②

hist = cv2.calcHist(src)
パラメータ名 説明
src 入力画像(1チャンネル)
hist ヒストグラムのデータ(2次元配列)

サンプルコード①グレースケール画像(1ch)のヒストグラム

グレースケール画像(1ch)のヒストグラムを作成するソースコードと実行結果です。

">

■入力画像(左)と出力したヒストグラム(右)

入力画像は天体望遠鏡で撮影したオリオン大星雲です。
黒い部分が多いので、ヒストグラムが左寄りになっています。

サンプルコード②RGBカラー画像(3ch)のヒストグラム

RGBカラー画像(3ch)のヒストグラムを作成するソースコードと実行結果です。


■入力画像(左)と出力したヒストグラム(右)

RGBカラー画像(3ch)をRed(赤)、Green(緑色)、Blue(青)の1chずつに分解してヒストグラムを計算し、プロットしています。

関連ページ

【Python版OpenCV超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。

コメント