2012年10月18日木曜日

Windows7 64bit版にOpenCV 2.4.2の開発環境を構築した


Visual C++ 2010 Expressは、64bitのプロジェクトを作成できないので、OpenCVの32bit版を使用し、32bitのプロジェクトを作成するのであれば、以前のWindows7 32bit版の構築方法と同じ手順でできる
Visual C++ 2010 Express へのパスの設定含めて1時間もかからない

2012年10月16日火曜日

OpenCVでオリジナルと処理結果をあわせて保存する



OpenCVの処理がどのようなものであるかわかりやすくするために、オリジナルの画像と処理画像を水平方向に連結してファイルに出力する

 連結は、
cv::hconcat(matOrg, matRes, matOut);

 で水平方向画像を作成し、横サイズ2倍でopenしたVideoWriteに出力すればよい

 ただし、matOrgとmatResのフォーマットは同じにしないとOpenCVが落ちる

2012年10月15日月曜日

OpenCV NativeViewerのインストールを試みた


NativeViewerは、OpenCVのMat変数の中身をデバッグ中に画像として表示できる拡張機能であるということを知ったので早速インストールを試みたが残念ながら

Visual Studio 2010のみしかサポートされていない。

ExpressEditionの拡張機能マネージャからオンラインでインストールできるのではないかと、考えたが残念ながら検索には引っかからなかった。(右上の検索窓を使用)




NativeViewer_v0.12.vsixをダウンロードしても、サポートされていないとのメッセージが表示されだめである。

今後サポートされることを期待しよう。

11/22 追記
11月10日にVer1.0がリリースされている。ここからダウンロード

2012年10月10日水曜日

OpenCV用にコモンコントロールのTextBoxに入力された文字列を数字として取得する


OpenCVでGUIから閾値を指定した場合がある。
その場合、GUIのTextBoxの文字列をfloat等に変換する必要がある。

TextBoxの型は、system::stringであり、これをstd::stringに変換する場合は、若干手間が必要であった。

一方、floatへの変換は、下記の方法でできる。

float f = float::Parse(this->textBox1->Text);

本来は、数字以外の入力がエラーになるためtry catchなどのエラー処理が必要であるが、自分用なので手を抜いている。


2012年10月2日火曜日

PlayStation Eyeのドライバーがエラーメッセージを表示した

PlayStation Eyeのカメラ画像を記録しようと自作アプリを起動したところ、下記の画面が表示され一瞬壊れたのかとあせった。



原因は、USBケーブルをPCにつないでいないだけだった。ケーブルをさしてアプリを立ち上げたところ無事カメラ画像が表示された。

しかし、USBケーブルをさしていないのにドライバーが動いているようで不気味である。

2012 CEATECでの画像認識関連をまとめてみた


本日から6日まで幕張でCEATECが開催されている

数は少ないが、インターネットのニュースから画像認識関連をまとめてみた


トヨタが「CEATEC」に初出展、超小型EV「Smart INSECT」を披露
http://monoist.atmarkit.co.jp/mn/articles/1209/28/news024.html

ドコモ 視線で操作できるタブレット「ibeam」に注目
http://news.mynavi.jp/articles/2012/10/01/ceatec01/

富士通 小型カメラとLEDを用いたPCに内蔵可能な視線検出技術
http://pr.fujitsu.com/jp/news/2012/10/2-1.html

STANLEYでジェスチャーコントロールを体験してきた
http://www.gizmodo.jp/2012/10/_ceatec_stanley.html

2012年10月1日月曜日

OpenCVでVGAサイズの画像を30fpsで2枚リアルタイムに表示する


カメラからの入力画像と処理結果の画像の2枚を、VGAサイズでリアルタイム(30fps)に表示しようと試みたが、なぜか片方の表示がたまにつまった状態になった

オリジナルプログラムの抜粋

while(true) {
  cap >> mat;
  cv::imshow("org,mat);

  cv::Mat res = hoge(mat);
  cv::imshow("hoge",res);

  cv::waitKey(10);
}

CPUの負荷は25%ぐらいで余裕のはずである。


いくつか要因を考え試行錯誤を試みた結果、

  cv::waitKey(30);

に変更することで表示されるようになったと思われる。
30は、暫定値であり、下記に示すように本来まじめに考える必要がある。


どうやらwaitKeyの時間で、フレームバッファに書き込みをしており、この時間が短いためつまった状態(こま落ちした)になったと推測される。


30fpsを確保するには、1フレームの処理時間(while内の処理)を33msec内にする必要がある。

理想は、画像処理の時間+waitKey = 33msecであるが、この値が小さくても、OpenCVのカメラ入力処理で30fpsに調整されるため表示がおかしくなることはなさそうである

一方大きい場合は、たとえば、waitKey(500)で試してみると、極端なこま落ち状態になった。

以上