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を異なる値にすると、プレーヤで再生される速度を、変化させることができる