Python OpenCV3で均一化したヒストグラム出力

Share on Facebook
Pocket
LINEで送る
Bookmark this on Google Bookmarks

Python OpenCV3で度数分布を算出してヒストグラム出力 の続き。

前提

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

元画像と元画像のヒストグラム

元画像(sora.jpg)をプログラム内でグレースケールし、ヒストグラムを作成する。

グレースケール後の画像
 
スクリーンショット 2015-07-01 21.27.16

 

ヒストグラム
スクリーンショット 2015-07-01 21.28.01

 

均一化したヒストグラムを出力

均一化には、equalizeHistメソッドを使う。
equalizeHistの使い方は次の通り。

img_dst = cv2.equalizeHist(グレースケール化した画像)

実際に均一化してヒストグラムを作成してみる。
sourceディレクトリにhistgram2.pyを作成する。

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

import cv2
import numpy as np

if __name__ == '__main__':

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

    # グレースケール
    img_gry = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)

    # ヒストグラムの均一化
    img_eqh = cv2.equalizeHist(img_gry)

    # ヒストグラム表示用のイメージを作成
    img_histgram = np.zeros([100, 256]).astype("uint8")
    rows, cols = img_histgram.shape

    # 度数分布を求める

    # 次元ごとの度数分布のサイズ
    hdims = [256]

    # 各次元の度数分布の最小値と最大値
    hranges = [0, 256]

    histgram = cv2.calcHist([img_eqh], [0], None, hdims, hranges)

    # 度数の最大値を取得
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(histgram)

    for i in range(0, 255):

        # 算出した度数分布の値を取得する
        v = histgram[i]

        # 描画する
        cv2.line(img_histgram,
                 (i, rows),
                 (i, rows - rows * (v / max_val)),
                 (255, 255, 255))

    # 表示

    # グレースケール化した画像の表示
    # cv2.imshow("Show GRAY Image", img_gry)

    # 均一化した画像の表示
    # cv2.imshow("Show EQUALIZE HISTGRAM Image", img_eqh)

    # 均一化した画像のヒストグラムの表示
    cv2.imshow("Show HISTGRAM Image", img_histgram)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

実行する。

(opencv_python)$ python histgram2.py

均一化した画像は次の通り。

スクリーンショット 2015-07-01 21.29.18

 

均一化したあとのヒストグラムは次の通り。

スクリーンショット 2015-07-01 21.29.53

 

Follow me!

コメントを残す

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