OpenCV

[OpenCV] 画像にモザイクをかける方法

自分で色々なモザイク画像を作成してみるのは面白そうですよね。モザイク処理のように画像に加工を行う際には、フィルタ処理というものを使います。

OpenCVには様々なフィルタ処理が用意されています。


本記事では膨張処理と収縮処理を用いて、以下のようなモザイク処理をかける方法を分かりやすく解説していきたいと思います!

after-process-image1

モザイク処理の流れ

まずは、モザイク処理の流れを簡単に説明していきたいと思います!モザイク処理の簡単な流れは以下の通りです。

モザイク処理の一般的な流れ
  1. 収縮処理
  2. 綺麗に補間されないように指定した後に膨張処理

①の収縮処理を行うときに、小さく収縮させるほど膨張させたときに粗いモザイク画像になります。

after-process-image2

モザイク処理を適用してみる

では、実際にモザイク処理を画像に適用してみましょう。

import cv2

def main():
    image=cv2.imread("C:\Imagefile\cat-image.jpg")

    SCALE=0.1
    height=image.shape[0]
    width=image.shape
#収縮処理
    erode=cv2.resize(image,(round(width*SCALE),round(height*SCALE)),
                      interpolation=cv2.INTER_NEAREST)
#収縮後の画素をそのまま補間せずに膨張させる
    mosaic = cv2.resize(erode, (round(width), round(height)),
                        interpolation=cv2.INTER_NEAREST)

    cv2.imshow("mosaic image",mosaic)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__=="__main__":
    main()

(実行結果)

after-process-image3

このようにモザイク画像ができました!
本プログラムでは、以下の変数を指定しています。

    SCALE=0.1
    height=image.shape[0]
    width=image.shape

SCALE:値が小さいほど粗いモザイクとなる
height:画像の縦の大きさを取得
width:画像の横の大きさを取得

ここでSCALEの値を変化させてみます。上記の結果は、SCALE=0.1なのでSCALEの値をSCALE=0.05に変化させて実行してみると以下のようになりました。

after-process-image4
SCALE 0.05

このようにモザイクの解像度が粗くなっていることが分かります。

また、膨張を行う際には、interpolation=cv2.INTER_NEARESTを指定する必要があります。これは、収縮後の画素が膨張時に綺麗に補間されて膨張されないようにするためのものです。

以上となります。最後まで見ていただきありがとうございました!

輪郭を抽出する方法ノイズ削減についても紹介していますので是非参考にしてみて下さい!

画像をうっすらとぼかす際に使われるcv2.blur()など様々なフィルタを紹介しています!

プログラミングをしていて疲れちゃうなと感じる場合にはこちらの記事を参考にしてみてください!

プログラミング学習に役立つガジェット厳選4選!筆者が実際に使ってみて有用だと感じた、プログラミングに役立つガジェットを紹介しています!プログラミングされている方には是非とも読んでみてほしい記事です!...