自分で色々なモザイク画像を作成してみるのは面白そうですよね。モザイク処理のように画像に加工を行う際には、フィルタ処理というものを使います。
OpenCVには様々なフィルタ処理が用意されています。
本記事では膨張処理と収縮処理を用いて、以下のようなモザイク処理をかける方法を分かりやすく解説していきたいと思います!
モザイク処理の流れ
まずは、モザイク処理の流れを簡単に説明していきたいと思います!モザイク処理の簡単な流れは以下の通りです。
- 収縮処理
- 綺麗に補間されないように指定した後に膨張処理
①の収縮処理を行うときに、小さく収縮させるほど膨張させたときに粗いモザイク画像になります。
モザイク処理を適用してみる
では、実際にモザイク処理を画像に適用してみましょう。
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()
(実行結果)
このようにモザイク画像ができました!
本プログラムでは、以下の変数を指定しています。
SCALE=0.1
height=image.shape[0]
width=image.shape
SCALE:値が小さいほど粗いモザイクとなる
height:画像の縦の大きさを取得
width:画像の横の大きさを取得
ここでSCALEの値を変化させてみます。上記の結果は、SCALE=0.1なのでSCALEの値をSCALE=0.05に変化させて実行してみると以下のようになりました。
このようにモザイクの解像度が粗くなっていることが分かります。
また、膨張を行う際には、interpolation=cv2.INTER_NEARESTを指定する必要があります。これは、収縮後の画素が膨張時に綺麗に補間されて膨張されないようにするためのものです。
以上となります。最後まで見ていただきありがとうございました!
輪郭を抽出する方法やノイズ削減についても紹介していますので是非参考にしてみて下さい!
画像をうっすらとぼかす際に使われるcv2.blur()など様々なフィルタを紹介しています!
プログラミングをしていて疲れちゃうなと感じる場合にはこちらの記事を参考にしてみてください!