画像のモザイク処理
画像をモザイク処理します。画像を縮小してから元のサイズに拡大することでモザイク状になる仕組みです。拡大コピーでギザギザになるのと同じです。ポイントは拡大時の 補完方法にNearest neighbor(最近傍法)を指定することです。Nearest neighborは拡大画像が滑らかになるような補完をせず元の座標の画素をそのまま用いるためタイル状のいわゆるモザイク処理っぽくなります。
やること
- ファイル名を指定して画像ファイルを読み出す
- 画像を縮小する
- 元のサイズに画像を拡大する
- 画像うに名前を付けて保存する
使った関数
- cv2.imread : 画像ファイルの読み出し
- img.shape : 画像の高さ、幅、チャンネル数を取得する
- cv2.resize : 画像のサイズ変更
- cv2.imwrite : 画像を保存する
環境
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、ファイル名"twins.jpg"で、jupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。
twins.jpg
コード
import cv2 #OpenCVのインポート fname = "twins.jpg" #画像ファイル名 img = cv2.imread(fname) #画像を読み出しオブジェクトimgに代入 #オブジェクトimgのshapeメソッドの1つ目の戻り値(画像の高さ)をimg_heightに、2つ目の戻り値(画像の幅)をimg_widthに代入 img_height,img_width=img.shape[:2] scale_factor=0.1 #縮小処理時の縮小率(小さいほどモザイクが大きくなる) img = cv2.resize(img,None,fx=scale_factor,fy=scale_factor) #縮小率の倍率で画像を縮小 #画像を元の画像サイズに拡大。ここで補完方法に'cv2.INTER_NEAREST'を指定することでモザイク状になる img = cv2.resize(img, (img_width, img_height),interpolation=cv2.INTER_NEAREST) cv2.imwrite('mosaic.png',img) #ファイル名'mosaic.png'でimgを保存
実行結果
モザイク化された画像が保存されます。
縮小率を変えるとモザイクのサイズが変わります。 scale_factor=0.3とした場合
以下のサイトを参考にさせていただきました
OpenCV公式 >> resize
アルゴリズム雑記 >> 【画像処理】最近傍補間法の原理・計算式