OpenCV、機械学習、はやりのDeep learningの環境構築の方法、サンプルの動かし方、APIの使い方、Tipsなどをすぐに忘れてしまうので、備忘録として記録している。記憶がなくなるスピードが、早いのでメモしておかないと再現できなくなる確率が高まっている。 最近、再度HDDを飛ばしてしまい、過去の自分のページに再度助けられた。 また、DNNモジュールを触る機会が増えているので、C++からPyhonへと鞍替え中。 内容を気にいっていただければ、twitterで紹介願います。
2012年9月28日金曜日
OpenCV向けのhand検出用のhaarcascade xmlファイル
以下の人が親切にも公開してくれている
Mr. Markou ここから取得できる。
無地の背景で、グー、指1本、2本(ちょき)、3本、4本、5本(パー)を検出できる
当たり前だが、5本の本が検出率はよい
(形状により辞書を分けずに1つにまとめている)
Haarlikeに手自体が向いていないと思われるため、性能に関しては期待しないほうがよいだろう
2012年9月27日木曜日
OpenCVでコマンドラインの引数を取得する
Visual C++ 2010 Expressでデフォルトのコマンドラインプロジェクトを作成するとメイン関数の引数がUNICODE(設定に依存)となっておりメイン関数での引数の受け取りがややこしくなる。
int _tmain(int argc, _TCHAR* argv[])
そこで、反則的であるが簡単に済ませるのであれば、自分で
int _main(int argc, char* argv[])
に書き換えると処理が簡単になる
ファイル名など文字列の取得
std::string path;
if (argc > 2) {
path = std::string(argv[2]);
閾値などのintの取得
int th;
if (argc > 2) {
std::stringstream ss;
ss << argv[2];
ss >> offAngle;
と簡単になる。
ただし、上記の例でargv[2]と書いているが、引数の順番は、argv[]のindexと対応するため注意が必要である。
以上
2012年9月21日金曜日
OpenCVでビデオファイルの情報を取得する
VideoCapture::getに以下の引数を与えることで情報を取得できる
- CV_CAP_PROP_POS_MSEC ビデオの経過時間 msec
- CV_CAP_PROP_POS_FRAMES 0ベースのフレーム番号
- CV_CAP_PROP_POS_AVI_RATIO 相対位置 0 開始 1 終了
- CV_CAP_PROP_FPS フレームレート
- CV_CAP_PROP_FOURCC コーデックを示す4文字識別子
- CV_CAP_PROP_FRAME_COUNT 総フレーム数
- CV_CAP_PROP_FORMAT retrieve() で得られるMatのフォーマット
- CV_CAP_PROP_MODE ?
2012年9月15日土曜日
OpenCVのアプリをVisual Studio Express 2012 for Windows Desktopで作成してみた
Visual Studio Express 2012 for Windows Desktopがリリースされたのでここからダウンロードしてインストールした。
登録はしなくても30日は利用できるが、早速登録した。
今回は、VB,C#,C++のプロジェクトを扱うことができる。
画面の印象が、大きく変わり、個人的にはチープな印象をうける。
2010
2012
プロジェクトを、新規に作成し、includeのpathだけ設定し、2010のソースをそのまま貼り付け、ビルドしたらあっさり動いた。
どうやらライブラリのパスの設定を引き継いでいるようだ。
カメラのFPSを表示するプログラムを試したがあっさり動いた。
2012年9月10日月曜日
コマンドラインの引数をファイル名として取得する
インテリセンスが使えないので、フォーム形式の開発は効率が悪い。
そこでファイル名の選択のみGUIで行い、コマンドラインのアプリを呼び出す方式を試してみる。
まずは、引数の扱いに関してメモしておく。
セキュリティの警告が出るが気にしないでおく
2012年9月4日火曜日
Visual Studio 2010 ExpressのC++/CLIではIntelliSenseが効かない
OpenCVをForm形式のプロジェクトで作成する場合の一番の問題はこれ。
Intellisenseとは、入力支援機能の1つであり、クラスがどのようなメソッドが持つのか、メソッドの引数は何なのかを表示してくれるなくてはならない機能であるが、Visual Studio 2010 ExpressのC++/CLIでは、使えなくなってしまった
いまさら2008をインストールするのもWindowsが正しく動作するのかの不安もある
Google先生で調べてみると、多くの人が困っている様子。
いろいろな対策がかかれているが、筆者は、OpenCVに関連するところは、コマンドラインのプロジェクトで作成し動作確認を行い、GUIの部分だけ、模索しながら作成し、後で組み合わせることで対処している。
OpenCVにファイルダイアログを使用してファイル名を与える
OpenCVとC++/CLIを組み合わせることで、OpenCVに渡すファイル名や、パラメータなどGUIで設定できるようになる反面、.netオブジェクトを扱うため、いろいろ複雑になる場合もある。
本エントリーでは、ファイルダイアログにより、ファイル名の選択を行う。
プロジェクトの作成は、このエントリーを参照
1 オブジェクトの作成
コモンコントロールは、.netオブジェクトのため、newではなくgcnewでインスタンスを作ることになる
説明によると、戻り値はポインタではなくハンドルとのこと。
またオブジェクトは、*ではなく、^で宣言する必要がある
ファイルオープン用のダイアログは、以下のように作成
System::Windows::Forms::OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
2 ファイル名の取得
newと同じ -> でアクセスする。ついでにSystem::Stringからstd::stringへの変換をしているが、日本語の確認はしていないので注意。
宣言部に
using namespace System::Runtime::InteropServices;
を追加することを忘れずに
OpenCVでカメラ画像を60fpsでファイルに書き出す
Playstation Eyeの60fpsで入力した画像を、60fpsでファイルに記録するには、VideoWriteをOpenする場合に、fpsに60を設定し、whileのループ内でキャプチャした画像をwriterに書き出せばよい
また、カメラのfpsと記録のfpsを異なる値にすると、プレーヤで再生される速度を、変化させることができる
登録:
投稿 (Atom)