Python逆引き:画像にぼかし(ブラー)をかけたい

備忘録ヘッダ画像 逆引きソースコード

画像にブラーをかけるためには、PythonのOpenCVライブラリを使用すると便利。OpenCVは画像処理やコンピュータビジョンのためのライブラリであり、様々な画像処理操作を行うことができる。

モジュールをインストール

pip install opencv-python

コード

import cv2

# 画像の読み込み
image = cv2.imread('profile.png')

# ブラーをかける
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)  # カーネルサイズを調整してブラーの強度を変えることができる

# ブラーをかけた画像を表示
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# ブラーをかけた画像を保存
cv2.imwrite('blurred_image.png', blurred_image)

この例では、cv2.GaussianBlur()関数を使用して画像にガウシアンブラーを適用している。
第二引数にはカーネルサイズを指定し、第三引数にはX方向の標準偏差を指定する(Xだけ指定するとY方向も同じ値になる)。カーネルサイズを大きくするとブラーの強度が増す。
また標準偏差にゼロを指定しているが、cv2.GaussianBlur()関数は自動的に適切な標準偏差を計算してくれる、したがって、第三引数にはゼロを設定しておいて困ることはないだろう。

このコードを実行すると、指定した画像にブラーがかかった画像が表示され、また新しい画像として保存する。画像ファイルはプロジェクトディレクトリ内に保存される。

実行結果
Python画像ぼかし元画像
Python画像ぼかし(カーネルサイズ15)

プロフィールの画像を対象に、カーネル指定値15でブラーをかけた場合こんな感じになる。

カーネルって?

カーネルは、画像処理においてフィルタリングや畳み込みなどの操作を行う際に使用される行列のサイズを指す。OpenCVにおいても、カーネルサイズはフィルタの大きさを決定する。
例えば、ガウシアンブラーを適用する際には、カーネルサイズを指定してフィルタの大きさを決定する。カーネルサイズが大きいほど、周囲のピクセルの影響を受ける範囲が広がり、結果としてよりぼかしがかかった画像が生成される。

GaussianBlur()関数のカーネルサイズの指定方法は、タプル (width, height) を使用する。
たとえば、 (3, 3) のカーネルサイズは3×3のフィルタを意味し、 (5, 5) のカーネルサイズは5×5のフィルタを意味する。

以下は、カーネルサイズを (51, 51) としてガウシアンブラーを適用する例

blurred_image = cv2.GaussianBlur(image, (51, 51), 0)

この場合、カーネルサイズは幅51ピクセル、高さ51ピクセルのフィルタが使用される。
画像の通り、15ピクセル指定時の時よりもぼかしが強くなっているのがわかる。(2枚目の画像が51)

Python画像ぼかしカーネルサイズ比較(カーネルサイズ15)
Python画像ぼかしカーネルサイズ比較(カーネルサイズ51)
偶数指定でエラー

ちなみにカーネルに偶数を指定すると以下のようなエラーになる。

Exception has occurred: error
OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\smooth.dispatch.cpp:294: error: (-215:Assertion failed) ksize.width > 0 && ksize.width % 2 == 1 && ksize.height > 0 && ksize.height % 2 == 1 in function 'cv::createGaussianKernels'
タイトルとURLをコピーしました