Python OpenCV3で均一化したヒストグラム出力
Python OpenCV3で度数分布を算出してヒストグラム出力 の続き。
前提
元画像と元画像のヒストグラム
元画像(sora.jpg)をプログラム内でグレースケールし、ヒストグラムを作成する。
均一化したヒストグラムを出力
均一化には、equalizeHistメソッドを使う。
equalizeHistの使い方は次の通り。
[python title="equalizeHistメソッドの使い方"]
img_dst = cv2.equalizeHist(グレースケール化した画像)
[/python]
実際に均一化してヒストグラムを作成してみる。
sourceディレクトリにhistgram2.pyを作成する。
[python title="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()
[/python]
実行する。
[shell]
(opencv_python)$ python histgram2.py
[/shell]
均一化した画像は次の通り。
均一化したあとのヒストグラムは次の通り。
ディスカッション
コメント一覧
まだ、コメントがありません