OpenCV×Pythonで画像をぼかす方法|ガウシアンフィルタの基本と実装例
OpenCVは、画像処理に最も優れたPythonパッケージの一つです。信号にノイズが混入するのと同じように、画像にもさまざまな種類のノイズが含まれており、その主な発生源はカメラセンサーなど画像取得元そのものです。PythonのOpenCVパッケージには、画像を滑らかにする「スムージング(平滑化)」、いわゆる「ぼかし(ブラー)」処理を行うための機能が用意されています。
本記事では、その中でも特に一般的な手法であるガウシアンフィルタ(Gaussian Filter)を使った画像のぼかし方を解説します。ガウシアンフィルタを使用すると、画像内のシャープなエッジ(輪郭)を滑らかにしながら、過度なぼかしを最小限に抑えることができます。
cv2.GaussianBlur() の構文
cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType=BORDER_DEFAULT]]])
主な引数
src – 入力画像
dst – 出力画像
ksize – ガウシアンカーネルのサイズ [高さ, 幅]。[0, 0] を指定した場合は、sigma の値から自動的に計算されます。
sigmaX – X軸方向(水平方向)のカーネル標準偏差。
sigmaY – Y軸方向(垂直方向)のカーネル標準偏差。
borderType – カーネルを画像の端に適用する際の境界の扱い方を指定します。指定できる値には、cv.BORDER_CONSTANT、cv.BORDER_REPLICATE、cv.BORDER_REFLECT、cv.BORDER_WRAP、cv.BORDER_DEFAULT、cv.BORDER_ISOLATED、cv.BORDER_TRANSPARENT などがあります。
以下は、OpenCVパッケージを使って画像にガウシアンブラーを適用するサンプルプログラムです。
import cv2
import numpy
# 画像を読み込む
src = cv2.imread('LionKing.jpeg', cv2.IMREAD_UNCHANGED)
# src画像にガウシアンブラーを適用
dst = cv2.GaussianBlur(src,(3,3),cv2.BORDER_DEFAULT)
# 入力画像と出力画像を表示
cv2.imshow("Gaussian Blur",numpy.hstack((src, dst)))
cv2.waitKey(0) # キーが押されるまで待機
cv2.destroyAllWindows() # 画像を表示しているウィンドウを破棄
実行結果

カーネルサイズが (3, 3) の場合、元画像とぼかし画像はほとんど同じように見えます。そこで、次にカーネルサイズを大きくして結果を確認してみましょう。
dst = cv2.GaussianBlur(src,(13,13),cv2.BORDER_DEFAULT)

カーネルサイズを (13, 13) にすると、2つの画像の違いがはっきりと分かるようになります。このように ksize の値を調整することで、ぼかしの強さを自由にコントロールできます。ノイズ除去や前処理など、用途に応じて最適なカーネルサイズを見つけてみてください。
-
PythonとOpenCVで実現するテンプレートマッチングの基本とマルチスケール対応
テンプレートマッチングとは、実際の画像の中から、あらかじめ用意した小さな画像(テンプレート)と一致する部分を探し出す技術です。基本的にはパターンマッチングの一種であり、物体検出や顔認識など、さまざまなコンピュータビジョンのタスクの基礎となる手法です。PythonではOpenCVモジュールを使うことで、このマッチング処理を簡単に実装できます。本記事では、OpenCVのテンプレートマッチング機能を使った具体的な方法を解説します。OpenCVのインストールOpenCVの機能を利用するには、まずpipでライブラリをインストールします。sudo pip3 install opencv-python閾値(
-
Python・OpenCVでヒストグラム平坦化を実装する方法|cv2.equalizeHist()の使い方
ヒストグラム平坦化(Histogram Equalization)とは ヒストグラム平坦化は、画像処理において画像のヒストグラムを利用してコントラストを調整する手法です。 この手法は、多くの画像の全体的なコントラストを向上させる効果があります。特に、画像内の有効なデータが近いコントラスト値で表現されている場合に威力を発揮します。この調整を行うことで、輝度値がヒストグラム上により均等に分布するようになり、局所的にコントラストが低い領域でも高いコントラストを得られるようになります。 OpenCVの cv2.equalizeHist() 関数 OpenCVには、この処理を実行するための関数 cv2