Rで画像処理ってできるんだろうかと軽い気持ちでネットを調べてみたらR版のopenCVを利用すれば実現出来ることがわかりまして、色々動かしてみました。
きちんとopenCVを使用したことが無いもので、従来のopenCVと比べて出来ることは限られているのかもしれませんが、使い方を紹介させていただきます。
今回、サンプルに使用する画像は著作権フリー画像を扱っているGAHAG様から写真をいただきました。ありがとうございます。
###画像処理
まずは画像処理から。
サンプル画像はopencv::ocv_picture
関数でWebカメラ撮影することもできますが、自前だとたいへん見栄えがよろしくないので、大人しくプロの写真を使うことにしました。
画像は以下を使用します。
ソースは以下です。
# ライブラリ -------------------------------------------------------------------
pacman::p_load(opencv)
# ソース本文 -------------------------------------------------------------------
#画像の読み込み
photo <- ocv_read("gahag-0119426971-1.jpg")
photo
####顔認識
画像に手を加えていきます。
まずは顔認識。opencv::ocv_face()
関数で顔認識をします。
#顔認識
ocv_face(photo)
####顔認識(マスキング処理)
顔認識をしてマスキング処理を加えます。
opencv::ocv_facemask()
関数を使用します。
#顔をマスキング
ocv_facemask(photo)
####エッジ検出
エッジ検出を行います。
opencv::ocv_edges()
関数を使用します。
#エッジ検出
ocv_edges(photo)
####ぼかし
ぼかし表現で表示します。
opencv::ocv_blur()
関数を使用します。
#ぼかし
ocv_blur(photo)
####スケッチ風
スケッチ風に表現します。
opencv::ocv_sketch()
関数を使用します。
#スケッチ風
ocv_sketch(photo)
####スタイライズ
スタイライズ効果を入れます(どんな効果なのかは良くわかっていない)。
opencv::ocv_stylize()
関数を使用します。
#スタイライズ効果
ocv_stylize(photo)
####マーカー表示
マーカーをプロットします。
opencv::ocv_markers()
関数を使用します。
#マーカー表示
ocv_markers(photo)
####局所特徴領域を表示
局所的に特徴のある領域を□で囲みます。
opencv::ocv_hog()
関数を使用します。
#局所特徴領域
ocv_hog(photo)
###動画処理
RのopenCVで動画処理もできるようです。
opencv::ocv_video()
関数を使用します。
#動画処理
ocv_video(function(input){
#エッジ検出
ocv_edges(input)
})
筆者をエッジ検出した動画が撮れました。
サンプルとしてopencv::ocv_edges()
関数を使用しましたが、顔認識(ocv_face()
関数)やマーカー表示(ocv_markers()
関数)でも難なく動作を確認することができました。
###おわり
実用性はさておき、ご興味があれば触ってみるのはいかがでしょう。
やっていきましょう。