[Python]OpenCVの使い方入門 モザイク処理のソースコード公開
画像処理の大人気ライブラリOpenCVを使ったモザイク処理の紹介
最近の画像処理の需要増加は目覚ましい物があります。機械学習(AI)による欠品検査や医療業界でも活発に開発が続けられています。
私が所属している会社でも某私立大学の研究室と共同研究を行っています。あまり進捗が良くないようですが・・・。
今回は画像処理の中でも有名なモザイク処理について解説していこうと思います。恐らくテレビのニュースなどでも一部モザイク処理が入る事がありますよね。あのモザイクです。
OpenCVによるモザイク処理 ソースコードも公開
画像処理のライブラリはたくさんありますが,今回はOpenCVというライブラリを使っていきます。使うプログラミング言語と開発環境は以下の通りになります。
- プログラミング言語:Python3
- 開発環境:Visual Studio2019 Professional
ちなみに,PythonでOpenCVライブラリを使う画像処理は割とテンプレートな形です。
OpenCVは簡単なプログラムだけで代表的な画像処理システムを構築できる大人気ライブラリです。まぁモザイクに関しては専用の関数を使う訳ではないのですが。
画像処理の基本についてはこちらの記事で,OpenCVによる画像の読込などはこちらの記事で紹介していますので是非見ていってください。
今回はサンプル画像として2020年11月時点で大人気を誇るVTuberの1人である常闇トワ様の公式画像を使わせていただきます。いや~可愛らしいですよね。
こちらの画像をC:\Temp\towa.jpgという名前で保存して以下のプログラムを実行するだけでモザイク処理ができます。
import cv2
img = cv2.imread('C:/Temp/towa.jpg') #これでimgに画像データが入る
SCALE = 0.2 #画像を縮小する倍率を指定
height = img.shape[0] #取得した画像の高さを取得
width = img.shape[1] #取得した画像の横幅を取得
dst = cv2.resize(img,(round(width * SCALE),round(height * SCALE)),interpolation=cv2.INTER_NEAREST)
#↑元画像を補間なしに縮小する(0.2倍)
cv2.imwrite('C:/Temp/SmallSize.jpg',dst) #縮小した画像を保存
dst = cv2.resize(dst,width,height,interpolation=cv2.INTER_NEAREST)
#↑縮小画像を補間なしで元のサイズに戻す(1.0倍)
cv2.imwrite('C:/Temp/mosaic.jpg',dst) #元のサイズに戻した画像を保存
たったこれだけです。簡単な処理の流れは以下の通りです。
- jpg画像から画像データをimgに代入する(3行目)
- 元画像を一度縮小するための倍率を指定(5行目)
- 元画像の大きさを取得(6,7行目)
- 元画像を指定した倍率で縮小(9行目) ついでに参考のために画像を保存(11行目)
- 縮小した画像をすぐに元のサイズに戻す(13行目)
- 元に戻した画像を保存する(15行目)
最終的な画像のアウトプットは以下です。元画像から見て見事にモザイクがかかっています。
ただモザイクかかっていても可愛いって分かるのはすごいですよね。
今回のソースコード上ではcv2.resize関数の中でcv2.INTER_NEARESTを指定すると画像の縮小,拡大時に補間をしなくなります。モザイクをかける場合は元のサイズに戻す時にcv2.INTER_NEARESTを指定しないと綺麗な状態に戻ってしまいます。
cv2.resize関数に関しては OpenCVで画像のサイズ変更 ソースコードも紹介 で書いてありますので是非みてください。
ちなみに,モザイクの英語のスペルって mosaic なんですね。皆さん知ってましたか?ちなみに私は知らなかったのでグーグル検索しました。