スマートフォン用の表示で見る旅の途中。Rainbow!」が発売されました。おめでとうございます。Up!」の世界観(?)が掴めてきた感があります。Rainbow!」のMVもYouTubeで公開されています。www.youtube.comこの動画の魅力は実際に観てもらえば分かると思いますが、ひとつ挙げるならば4:06くらいのウィンクは皆好きではないでしょうか。*1TwitterというSNSのTimeLineをぼーっと眺めていたところ、YuiOguraアイコンの方がこのウィンクのスクショを流しているのを見て保存しようとした瞬間に(どうせならもっと良い画質で保存するか〜)と思ったところまでは良かったのですが、色々試行錯誤したもののYouTubeの動画をスクショするのには限界がありました。Winkしていくか〜」となりました。この記事では簡単にC++を用いたopenCVで画像の表示、顔の検出、動画読み込み、保存までを解説していきます。はじめに断っておきますが、この記事では仕様や原理にはあまり深入りせず、「動いたのでよし」という方針を採用しています。突っ込んで知りたい方は適宜ググっていただくか、リンクを貼っている場合もあるのでそこから飛んでいただけると良いかと思います。間違った発言などありましたら指摘など歓迎です。動画の入手まず、水瀬いのりさんのウィンクが収められた動画を入手する必要があります。Rainbow!水瀬いのりアニメ¥400自分はここで買いました。400円するだけあって画質は十分です。言い忘れてましたがopenCVのインストールは各自でお願いします(えぇ...ちなみに自分の環境はMacOSでgccでコンパイルしてます。openCVのバージョンは3だった気がする。普通の画像を表示します。0;}これを普通にコンパイルするとエラーが出ると思います。場合は以下のようにコンパイルオプションを指定すると直ります。opencv`毎回これを入力するのは骨なので、自分は以下のようにmakefileに書き込んでmakeするようにしています。opencv`cv::Matというのは画像のためのclassで、この中に画像についてのいろいろな情報が保存されています。詳しくは(ここ)に載っています。あとはコメントから察してください。(えぇ...画像が表示されたら成功です。続いて人間の顔の検出に写っていきたいと思います。この検出器を一から書くとなるとそれこそ水瀬いのりさんが次のアルバムを出すまでかかってしまいそうですが、なんとopenCVにはあらかじめ検出器が用意されています。数ある検出器の中で、今回はCascadeClassifierというものを使ってみたいと思います。画像を読み込みます検出器のインスタンスを宣言し、パラメータを読み込ませます。このパラメータは(ここ)からダウンロードしてきて同じディレクトリに置いています。猫の顔とかも検出できるようです。顔を検出しやすいように画像をグレースケール化して、検出器にかけます。結果は長方形(cv::Rect)のvectorに格納されます。cv::Rectは角の座標と各辺の長さなどを持っているクラスです。見つけた顔の数を標準出力に表示し、実際に長方形を元の画像(のデータが格納されたcv::Mat)の上に描画します。あとは先ほどと同じように画像を表示します。cv::Scalarは図形の枠線のRGBを指定しています。正確にはBGRの順です。cv::rectangleについては(ここ)に。最後に、cv::imwriteで画像を保存しています。同名のファイルがなければ新しく作られますが、もし先にあったら上書きされてしまうのでご注意を。こんな感じになったら成功です。終わりに想像以上に長くなってしまったので一旦ここで区切りたいと思います。2019年4月14日こんな感じで精度がガバガバなのでもうちょっと調べてから書きたいと思います。(改善しなかったら妥協するかもしれません...)ここまでお付き合いくださりありがとうございました。*1:nico生で言及されていましたがあのウィンクは台本だそうです。1)月別アーカイブはてなブログをはじめよう!sifi_borderさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?はてなブログをはじめる(無料)はてなブログとは旅の途中。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。