OpenCVを使って画像にトップハット(Top-Hat)変換を適用する方法
このプログラムでは、画像に対してトップハット(Top-Hat)操作を実行します。トップハットはモルフォロジー(形態学的)演算の一種で、入力画像から小さな要素や細かいディテールを抽出するために使用されます。特に、暗い背景の中にある明るい物体を強調したい場合に非常に効果的です。
処理には cv2.morphologyEx(image, cv2.MORPH_TOPHAT, kernel) 関数を使用します。
元画像

アルゴリズム
ステップ1: cv2 をインポートする。 ステップ2: 画像を読み込む。 ステップ3: カーネルサイズを定義する。 ステップ4: 画像とカーネルを cv2.morphologyEx() 関数に渡す。 ステップ5: 結果を表示する。
サンプルコード
import cv2
image = cv2.imread('tophat.jpg')
filter_size = (5,5)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, filter_size)
image = cv2.morphologyEx(image, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('TopHat', image)
出力結果

解説
ご覧のとおり、画像内の小さなディテールが強調されています。トップハット変換は、「元画像からオープニング(開いた)処理を適用した画像を差し引く」ことで構成される演算であり、背景よりも明るく小さい領域を効率的に取り出すことができます。そのため、微細構造の検出やノイズの影響が少ない特徴抽出など、さまざまな画像処理の場面で活用されています。
ポイント
表示ウィンドウを正しく開閉するためには、コードの末尾に cv2.waitKey(0) と cv2.destroyAllWindows() を追加しておくことをおすすめします。
-
PythonとOpenCVで実現する画像の加算とブレンディング
画像処理において、画像は行列(マトリクス)として扱われます。行列の中身は画像の種類によって異なり、二値画像(0と1)、グレースケール画像(0〜255)、RGB画像(各チャンネル0〜255)などがあります。したがって、2枚の画像を「加算する」ということは、対応する位置にある画素同士の行列を単純に足し合わせることを意味します。 OpenCVライブラリには、画像を加算するための関数 cv2.add() が用意されています。ただし、画像の加算を行う際は、2枚の画像のサイズ(幅と高さ)が同一である必要がある点に注意してください。また、cv2.add() は飽和演算(サチュレーション)を行うため、計算結果
-
Python・OpenCVでヒストグラム平坦化を実装する方法|cv2.equalizeHist()の使い方
ヒストグラム平坦化(Histogram Equalization)とは ヒストグラム平坦化は、画像処理において画像のヒストグラムを利用してコントラストを調整する手法です。 この手法は、多くの画像の全体的なコントラストを向上させる効果があります。特に、画像内の有効なデータが近いコントラスト値で表現されている場合に威力を発揮します。この調整を行うことで、輝度値がヒストグラム上により均等に分布するようになり、局所的にコントラストが低い領域でも高いコントラストを得られるようになります。 OpenCVの cv2.equalizeHist() 関数 OpenCVには、この処理を実行するための関数 cv2