2014-07-25

OpenCVSharpにて、IplImageからHSV情報を取ってくる

Matに変換するとIplImageから容易にHSVの情報が取ってこれます。。

//RGBからHSVに変換
Cv.CvtColor(srcImage, hsvImage, ColorConversion.BgrToHsv);
Mat mat = new Mat(hsvImage,true);
for (int i = 0; i < mat.Height; i++) {
for (int j = 0; j < mat.Width; j++) {
Vec3b pix = mat.At<Vec3b>(i, j);
byte h = pix[0];
byte s = pix[1];
byte v = pix[2];
}
}


OpenCVSharpでのIplImage -> Mat 変換

OpenCVでは内部の画像フォーマットとして、従来はIplImageが主流でしたが、現在はMat形式を利用する流れになっています。で、当然、IplImageとMatへの変換についてはOpenCVSharpでも対応しており、
  • Mat mat = new Mat(srcImage);
というように、matのインスタンス生成時に IplImageを渡せば自動変換してくれます。

OpenCVSharpExtern.dllの設定に注意
Matクラスを利用するには、OpenCvSharp.CPlusPlus のパッケージを利用することになるのですが、このクラスは、OpenCVSharpExtern.dll を利用しているもよう。このdllは、参照設定では登録できないので、プロジェクトディレクトリに置かなければいけません。さらに、このファイルはプロパティにて
  • 出力ディレクトリにコピー:新しい場合はコピーする(または、常にコピーする)
という設定をしなければいけません。この設定を忘れると、上述のような変換の記述を実行すると、
  • TypeInitializationException が発生しました
というエラーが起きてしまいます。実はこのことに気づかず、Matへの変換ができなくて、何でかなーとかなり悩んでました。OpenCVのライブラリが動かなければすぐに気づいたのですが、通常の処理で問題なく実行できてましたので、まさか、初歩的な設定を忘れていたとは、、、

これで、ラボでも本格的にMatベースの記述に移行することができそうです。



Kinect for Windows v2センサー(オープンベータ)を入手しました

事実上の製品版であろうKinect2 のオープンベータを入手しました。アルファ版との外見的な違いをざっと報告。

本体は同じ
アルファ版には悪趣味なシールが貼ってある点を除いて、同じと思われます。ベータ版にはKINECTの刻印があります。おそらく、アルファ版ではネーミングが未定だったのでシールを貼っていたのだと思われます。



付属ケーブルが小型化
アルファ版では、大げさなデカイ変換器だったのですが、以下の写真のように小型化されました。



ただ、初代はこういったものがなかったわけですから、ちょっと残念なところです。初代からアダプターが増えている理由は、
  • 本体への電力供給量の増加
が一番の要因と予測できます。TOFでリアルタイムにレーザで奥行きをとるわけですから、より大きな電力が必要になったのでしょう。現状ではこれ以上の小型化は期待できないですね。

というわけで、ボチボチとうちのゼミでもKinect2に移行していきます。