OpenCVの練習で笑い男っぽいやつを作ってみた

学校の制作でOpenCVを利用する必要があったので
誰でも思いつきそうな、笑い男のまね事が出来るものを作ってみました。

OpenCVはおろか、画像処理のいろはも知らない状態だったので、
ぐぐってぐぐって、様々な方のソースコードを参考にしたり、つぎはぎしたりで、
僕が書いたというよりは、ほとんどパッチワーク状態です(笑)

ですので、技術的な解説がほしい、という方は
期待に添えないと思います。あくまでネタとして
こういうのやりたかった!!って人の手間が少しでもなくなれば、程度の内容です。

それでもとりあえず動いて嬉しかった。
windowsのフォームアプリの勉強にもなったし、結構満足しました。

動作の概要

  1. アプリケーションが起動する
  2. USBカメラから一枚画像を取得
  3. 取得した一枚画像に顔と認識される領域が存在するかチェック
  4. 顔と認識された領域に、1ピクセルずつ笑い男の画像を上書き
  5. windowに出力
  6. 2-5の繰り返し

これだけです。笑い男の画像を差し替えれば
ネタとしては汎用性が非常に高いプログラムだと思います(笑)

僕の動作環境

  • OpenCV 2.4.5
  • OpenCVSharp (OpenCV2.4.5用)
  • .NET framework 4.0
  • USBカメラ 1つ(僕はMacbookProのディスプレイに最初からついてるやつ)
  • ネットから拾った適当な笑い男のpng画像

実行したときの画像

photo

複数人でも一応認識するけど精度は微妙
横顔とかだと認識しない。

ソースコード内でインポートしているXMLファイルをいじったり増やしたり
しないとダメかもしれません。

課題

png画像だから簡単に透過できるのかなー、と思いきや、なぜかうまく動作しなかったのと、
背景真っ黒にして、黒(#000000)を描画しないように変更したら、
すげー簡単だったので、妥協しました(笑)

複雑な画像だと、こうはいかないので注意です。

あと、攻殻機動隊に登場する笑い男は画像回転してた気がする(文字のところだけ)
それ作るには多分、画像から作りなおさないとだめかも。

ソースコード(笑

上記にあるとおり、ほとんどつぎはぎです。後述の参考リンクを
見たほうが勉強になると思います。

参考リンク

最後に

秋葉原電気街で、どこかのPCパーツ屋さんが、同じような
サンプルをデモで動かしていて、自分の顔が海物語のマリンちゃんに
なってたなー、っていうのをどうでもいいけど思い出しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です