Python・OpenCVでヒストグラム平坦化を実装する方法|cv2.equalizeHist()の使い方
ヒストグラム平坦化(Histogram Equalization)とは
ヒストグラム平坦化は、画像処理において画像のヒストグラムを利用してコントラストを調整する手法です。
この手法は、多くの画像の全体的なコントラストを向上させる効果があります。特に、画像内の有効なデータが近いコントラスト値で表現されている場合に威力を発揮します。この調整を行うことで、輝度値がヒストグラム上により均等に分布するようになり、局所的にコントラストが低い領域でも高いコントラストを得られるようになります。
OpenCVの cv2.equalizeHist() 関数
OpenCVには、この処理を実行するための関数 cv2.equalizeHist() が標準で用意されています。使い方は非常にシンプルで、引数としてグレースケール画像を渡すだけで、ヒストグラム平坦化された画像が出力として返されます。
効果的なケースと不向きなケース
この手法は、画像のヒストグラムが特定の範囲に集中している場合に特に効果的です。
一方で、明るいピクセルと暗いピクセルが混在しているなど、輝度の変動が大きく、ヒストグラムが広い範囲にまたがっている画像では、期待どおりの結果が得られないことがあります。そのような場合は、CLAHE(適応的ヒストグラム平坦化)など、より高度な手法を検討するとよいでしょう。
入力画像

サンプルコード
import cv2
# NumPyをインポート
import numpy as np
# imreadメソッドで画像を読み込む(第2引数を0にするとグレースケールで読み込まれる)
my_img = cv2.imread('C:/Users/TP/Pictures/west bengal/bishnupur/pp.jpg', 0)
# ヒストグラム平坦化を実行
equ = cv2.equalizeHist(my_img)
# 元画像と処理後の画像を横方向に連結
res = np.hstack((my_img, equ))
# 処理前と処理後の画像を並べて表示
cv2.imshow('image', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
コードのポイント
cv2.imread(path, 0):第2引数に 0 を指定することで、画像をグレースケールとして読み込みます。equalizeHist()の入力には必ずグレースケール画像が必要です。np.hstack():元画像と処理後の画像を横方向に並べて1枚の画像に結合し、比較しやすくしています。cv2.imshow()/cv2.waitKey(0):ウィンドウに結果を表示し、何らかのキーが押されるまで待機します。cv2.destroyAllWindows():終了時にすべてのウィンドウを閉じてリソースを解放します。
出力結果

-
PythonとOpenCVで実現するテンプレートマッチングの基本とマルチスケール対応
テンプレートマッチングとは、実際の画像の中から、あらかじめ用意した小さな画像(テンプレート)と一致する部分を探し出す技術です。基本的にはパターンマッチングの一種であり、物体検出や顔認識など、さまざまなコンピュータビジョンのタスクの基礎となる手法です。PythonではOpenCVモジュールを使うことで、このマッチング処理を簡単に実装できます。本記事では、OpenCVのテンプレートマッチング機能を使った具体的な方法を解説します。OpenCVのインストールOpenCVの機能を利用するには、まずpipでライブラリをインストールします。sudo pip3 install opencv-python閾値(
-
PythonのOpenCVモジュールで画像に幾何学図形を描画する方法
はじめに OpenCVの基本操作のひとつが「画像への描画」です。線、円、矩形(長方形)など、さまざまな幾何学形状を画像上に追加できます。 画像解析の現場では、画像の一部を強調表示したい場面がよくあります。たとえば、注目したい領域を囲む矩形を追加したり、特定の場所を指し示す矢印を描いたりするケースです。本記事では、PythonのOpenCVモジュールを使って画像に幾何学図形を描画する方法を、サンプルコードとともにわかりやすく解説します。 主な描画関数一覧 cv2.line() … 画像に直線を描画する関数 cv2.rectangle() … 画像に矩形を描画する関数 cv2.circle()