概要
OpenCV を使用して画像にモザイクをかける方法について解説します。
リサイズを利用したモザイク処理
画像のモザイク処理を行う領域を最近傍補間で一度小さいサイズに縮小したあと、元のサイズに拡大することでモザイク処理が行えます。
OpenCV で行う場合、cv2.resize() でリサイズします。

In [1]:
In [2]:

cv2.reisze()
でリサイズする際、補完方法に最近傍補完 (interpolation=cv2.INTER_NEAREST
) 以外を指定すると、タイル状ではなく、以下のぼやけたモザイク処理が行えます。
画像の一部だけをモザイク処理する
画像の一部の範囲のみモザイク処理したい場合は、まず処理対象の領域 (rectangular region of interest, ROI) を numpy のスライスを使用して切り出します。切り出した画像にモザイク処理を行い、元の画像の領域に代入します。

In [4]:

すりガラス風のモザイク処理を行う
iPhone のようなすりガラス風のエフェクトをかけたい場合は cv2.blur()
を使用します。
第 2 引数のカネールサイズ ksize=(k, k)
を大きな値にすると、よりぼやけた画像になります。

In [5]:

人の顔にモザイクをかける
一部の領域にモザイク処理を行う応用として、OpenCV のカスケード検出器で画像から顔の領域を検出し、モザイクをかける方法を紹介します。
まず、カスケード検出器である cv2.CascadeClassifier オブジェクトを作成します。
顔検出を行うには、CascadeClassifier.detectMultiScale() に画像を渡します。
顔が検出できた場合は、顔の領域を表す (左上の x 座標, 左上の y 座標, 幅, 高さ)
のタプルのリストを返します。
この領域に対して、モザイク処理を行います。

In [6]:
検出されました。(x: 140, y: 112, w: 58, h: 58)

コメント