【Python】画像にモザイクをかける

 

こんにちは。のっくんです。

 

今日の記事では、Pythonを使って画像にモザイクをかける方法をご紹介します。

 

ネコ
モザイクってあのグニャグニャしたやつ?顔を隠したり、、
のっくん
そうだよ。でも残念ながらOpenCVにはモザイク処理のライブラリが無いんだ。だから、原理から理解して自分で作るよ。大丈夫、10行ぐらいで作れちゃうんだ。

 

スポンサーリンク

 

この記事で使用するツール

・Python 3.6
・Jupyter Notebook
・opencv-python

モザイクの原理

 

モザイクは特殊な処理ではなく、一度縮小してから拡大すればできます。

 

 

左が5×5の元画像で、それを1×1の画像に縮小します。縮小する方法はいくつかありますが、上の例では画素の平均値を計算するイメージです。それを再度5×5に戻すと1つの画素が全体に引き伸ばしたような形になり、モザイクができるんです。

 

ちなみに、縮小する方法(アルゴリズム)の種類は以下の通り。

 

・Lanczos法
・平均画素法
・バイキュービック法

 

それぞれの仕組みはよく分かりませんが、ぶっちゃけ見た目に大差ないのであまり気にしなくて良いです。

 

縮小してから拡大することだけ覚えておきましょう。

 

プログラム

 

私のプロフィールである以下の画像にモザイクをかけるプログラムを作成します。

 

 

Jupyter Notebookを開いてください。

 

matplotlibを使ってインラインで画像を表示しますのでセルで以下のコードを実行しておきます。

 

 

次にモザイク処理を行うコードを書いていきます。モザイクをかける処理は他でも使えるので以下のようにモジュール化しておきます。

 

mosaic.py

 

mosaic.pyとmosaic-test.ipynbを同じディレクトリに配置してください。ジュピターノットブックで以下のようにインポートして使います。

 

mosaic-test.ipynb

 

put_mosaicの引数には、モザイクをかける画像と座標を指定してください。

 

 

実行すると、縦、横それぞれ200から800のエリアにモザイクがかかっています。うまくいきましたね。

 

参考

 

PythonによるAI・機械学習・深層学習アプリのつくり方、ソシム、2018.6