はじめに
こんにちは,光岡です.
久しぶりの投稿になってしまいました. 最近はレコメンドシステムの勉強をやっている関係でPythonに触れています.講義の課題に対して,Pythonで何か作れないかな~と思っていたところ,OpenCVが使えそう!となり,簡単なモザイク処理を試してみたので,この内容について書いてみたいと思います!
OpenCVとは
OpenCVとは,画像・動画に関する処理機能をまとめたオープンソースのライブラリになります. Intelが開発したOSSで,画像・動画の中に存在する物体の位置情報・パターン・動きをプログラムで識別することが可能です.
モザイクのかけ方
モザイクをかける手順としては,まずモザイク処理をしたい領域を一度小さいサイズに縮小します.今回は画像全体に対してモザイクをかけたかったので,画像全体を縮小します.縮小する際は,cv2.resize()
を利用しました.
縮小する際には,最近傍補間が行われます.不要な画素を削る間引き処理を行うことで,見た目が粗い状態になります.
次に縮小した画像を元のサイズに拡大することで,モザイクがかかった粗い状態で出力することができます.拡大する際にもcv2.resize()
を利用します.
実装
今回の実装では,O-DANで検索して見つけた画像をダウンロードして利用しました.
import cv2 def mosaic(img, ratio=0.1): h, w = img.shape[:2] reduced_img = cv2.resize( img, dsize=None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST, ) enlarged_img = cv2.resize( reduced_img, dsize=(w, h), interpolation=cv2.INTER_NEAREST, ) return enlarged_img img = cv2.imread('./shibuya.jpg') ratio = float(input()) mosaic_img = mosaic(img, ratio=ratio) cv2.imwrite("./shibuya_{}.jpg".format(ratio), mosaic_img)
結果
モザイク度合いを標準入力できるようにし,いくつかモザイク処理を施した画像を出力してみました.
元画像
0.01
0.005
0.001
まとめ
ライブラリを使うことで簡単に実装することができました!
現状,講義の課題で少し使うぐらいしか予定がありませんが,今後機械学習の勉強を進めていく際にOpenCVも使っていきたいと思いました.
以上になります.最後まで読んでいただきありがとうございました.
参考記事
【OpenCV】できることや特徴をわかりやすく解説 | 侍エンジニアブログ
OpenCV - 画像にモザイク処理を行う方法について - pystyle
C言語で画像の拡大縮小(最近傍補間編) | だえうホームページ