2012年10月30日火曜日

OpenCVのVideoWriterに関してのメモ


Windows版 OpenCVのVideoWriterに関してのメモ

フォーマットに関して
 CV_FOURCC('X','V','I','D') XVID  MPEG-4 ASP (Advanced Simple Profile)に準拠
 CV_FOURCC('M','J','P','G') モーションJPG
 CV_FOURCC('D','I','B',' ') 無圧縮


白黒での保存(Windowsのみ)
 VideoWriter::VideoWriter(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true)
 isColor をfalseに

 これに気づかず、以前白黒画像を一旦3chに変換して保存していた。

仕様orBug
 frameSizeより保存するMatのサイズが大きい場合、自動でスケーリングされる

2012年10月26日金曜日

OpenCV 2.4.3 RCがリリースされた


2.4.3のリリース予定が11/1日だったが、RC版が昨日リリースされた。
概略を以下に訳してみた。詳細は、ここで確認して

・従来の並列化のアルゴリズムが、新しいものに置き換わったとのこと
 TBBをインストールすることなく、パフォーマンスが向上するとのこと

・別エントリーにも書いたが、Android向けのフレームワークを改良
 カメラのサポートも増やした。 詳細は、OpenCV4Android Release Notesを

・iOS6向けのフレームワーク
  face detection, bilateral filter等のいくつかの重要なアルゴリズムは、スレッディングのおかげでA5以降のチップで高速化された
  バグも修正し、-O3の最適化がきくようになった。
  OpenCV iOSのチュートリアルもできた

・pythonのサンプル
  ASIFT, hand-written digit recognition, motion debluringなどのサンプルを追加

・2つの新規cascade辞書
 silverware and profile facesの辞書を追加

・"simple flow" optical flow algorithmの追加
 calcOpticalFlowSF が追加されているようだ

・CUDA対応

・OpenCL
 Technology-preview version

・バグ対応
 2.4.2から約130の修正

・github
  最新版は、ここからpullして

Android向けOpenCVアプリが更新された


2.4.3リリースに合わせての動きかもしれないが、Android向けOpenCV Managerが更新された。
機能追加を期待していたが、変更点はUIのバグ修正となっている。

あわせて、OpenCV Face DetectionのデモアプリとTegra 3 devices用デモアプリがリリースされている。

2012年10月24日水曜日

OpenCVのチュートリアルに関して調べてみた


本家のページにチュートリアルが掲載されている。
残念ながら代表的なすべての機能に関して、チュートリアルは、準備されてはいない。

以下に各章の概要を記す。
  量が多いので、古典的な画像処理まで

Introduction to OpenCV (概要)

  •  OpenCVの開発環境に関して
  •   Linux, Windows, Android, Mac


core module. The Core Functionality (基本関数)

  •  Matに関して
  •  画素へのアクセス
  •  フィルタ計算
  •  合成
  •  コントラスト
  •  グラフィックス
  •  文字描画
  •  離散フーリエ変換
  •  XMLファイル入出力
  •  互換性


imgproc module. Image Processing (イメージ処理)

  •  ぼかし
  •  膨張と収縮
  •  Morphological変換
  •  拡大と縮小
  •  閾値処理
  •  線形フィルター処理
  •  境界処理
  •  ソーベルフィルター
  •  ラプラシアンフィルター、
  •  キャニーエッジ
  •  ハフ直線検出
  •  ハフ円検出
  •  反転
  •  アフィン変換
  •  ヒストグラムの均等化
  •  ヒストグラム計算
  •  ヒストグラム比較
  •  バックプロジェクション
  •  テンプレートマッチング
  •  輪郭検出
  •  外接多角形
  •  外接四角形と外接円
  •  最小領域と最小楕円
  •  モーメント
  •  点と輪郭の関係


highgui module. High Level GUI and Media (GUIとメディア)

  •  トラックバー
  •  ビデオファイル(カメラ)からの読み出し(+画像の類似性の話)
  •  videoWriteHighGuiは、エントリーのみで文章がない(10/24)


to be continued

2012年10月23日火曜日

OpenCVの計算結果をファイルに書き込む

画像処理した結果や中間の値をファイルに保存するには、下記のようにする


2012年10月18日木曜日

OpenCVでcv::Matの平均を求める


画像の輝度値の平均を求める場合、各要素にアクセスし、輝度値の合計を求め、画素数でわれば輝度値の平均を求めることができる。
この場合、列と行でループをまわして、各要素へのアクセスをおこうなことになる。

OpenCVでは、平均を求める便利な関数cv::reduceが準備されている

C++: void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1 )

この関数では、1次元の方向しか処理を行わない
dim = 0 の場合、行方向に処理が行われ、列のみとなる
dim = 1 の場合、列方向に処理が行われ、行のみとなる

  rtypeは、処理の種類で下記のパラメータを指定する
CV_REDUCE_SUM 合計
CV_REDUCE_AVG 平均
CV_REDUCE_MAX 最大値
CV_REDUCE_MIN 最小値


画面全体の平均値を求めには、2回処理を繰り返せばよい。


ただし、縮退後のmatのタイプも自動的に入力のタイプに合せられるため、ucharのデータを使用すると結果もucharとなる

画像認識のセミナーを調べてみた 2


今後3ヶ月以内に開催される画像認識に関連するセミナーを調べてみた
10月11月は、前回メモがメインで、下記はその後に見つけたものである。
原則有料であるが、一部無料のものもある。


“Lytro”で理解するライト・フィールド・カメラの全貌
http://techon.nikkeibp.co.jp/article/SEMINAR/20120904/237726/
2012年10月26日(金)

FPGA画像処理を自ら構築する(受講無料)
http://www.avaldata.co.jp/support/seminar/54/201207/seminar_201211.html
2012年11月16日(金)

国際画像セミナー(聴講無料)
http://www.adcom-media.co.jp/ite/seminar/
2012年12月5日-8日

入門 動画像認識/解析/処理~特徴抽出と判定アルゴリズム
http://www.catnet.ne.jp/triceps/sem/s121211a1.html
2012年12月11日(火)

デジタル画像処理の基礎とノイズ除去・符号化・抽出法 ~PC演習付~
http://www.j-techno.co.jp/test/eisei_P.cgi?mode=sem&unit=2012121301
2012年12月13日 (木)

GPGPUプログラミングの基礎と画像処理の高速化実践講座 ~1人1台PC実習付~
http://www.j-techno.co.jp/test/eisei_P.cgi?mode=sem&unit=2012121900
2012年12月19日 (水)

画像局所特徴量と統計的学習手法の組み合わせによる物体認識
http://www.catnet.ne.jp/triceps/sem/s130129a.html
2013年1月29日(火)

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)で試してみると、極端なこま落ち状態になった。

以上