SyntaxHighlighter

2010-10-03

ARToolKit 覚書き 2

「ARToolKit現実感プログラム入門」という本に、ARToolKitとOpenCVを一緒に使うという項目があったので、試してみたら、自分がMacを使っているので、色々あったのでメモっとく(ちょっと前のことなので、抜けとかあるかも)。

とりあえず、OpenCVのサイトにMacOSXでOpenCVをインストールするにはMacPortsを使うのが簡単ということなので、MacPortsをインストールして、openCVをインストール。
すると、依存関係にある大量のアプリやらライブラリが同時にインストールされて、/usr/以下や/opt/local/いかに同じようなアプリが併存状態になってしまい、何となく気持ち悪い状態になります。

Xcodeの設定で、
追加>既存のファイルで/opt/local/libから
  • libcv.dylib
  • libcvaux.dylib
  • libcxcore.dylib
  • libhighgui.dylib

を選んで追加

ターゲットの情報>ビルド>検索パスに
  • ヘッダ検索パス /opt/local/include
  • ライブラリ検索パス /opt/local/lib

アーキテクチャ
・x86_64
を選択

でコンパイルすると、うまくいかなかった。

OpenCVは64ビット用のライブラリに対して、

$ file /opt/local/lib/libcv.dylib
/opt/local/lib/libcv.dylib: Mach-O 64-bit dynamically linked shared library x86_64


ARToolKitは32ビットでコンパイルしてしまったらしい

$ file libAR.a
libAR.a: Mach-O universal binary with 2 architectures
libAR.a (for architecture i386): current ar archive random library
libAR.a (for architecture ppc): current ar archive random library


ARToolKitを64ビットでもコンパイルするには、ARToolKitをコンパイルする用のプロジェクトで、それぞれのライブラリのターゲット
  • AR
  • ARgsub_lite
  • ARgsub
  • ARgsubUtil
  • ARMulti

の情報>ビルド>アーキテクチャ を
Standard (32/64-bit Universal)
にセットしてビルドすると良いらしい。


$ file libAR.a
libAR.a: Mach-O universal binary with 3 architectures
libAR.a (for architecture x86_64): current ar archive random library
libAR.a (for architecture i386): current ar archive random library
libAR.a (for architecture ppc): current ar archive random library


問題は、ARvideoだけはアーキテクチャをStandard (32/64-bit Universal)でビルドすると失敗する。64ビットではうまくいかないらしい。

すると、カメラから画像を取得する部分は、OpenCVのライブラリから取得するようにしないと良くないということらしい。


プログラムがコンパイル、リンクできるようになったところで、今度は、OpenCVのライブラリから取得した画像を、ARToolKitの表示関数で出力するには、画像の変換が必要らしいが、Windowsの方法は、上記の本の通りだが、Macはどうなんだろう?
上記本に書かれているような手段で、調べてみると、
  • OpenCVでカメラから取得できる画像がBGR(変更する方法があるかもしれないけど、私は分かりません・・・)
  • MacOSX版のARToolKitの画像のビットの並びは、ARGB

らしい。
そして残念なことに、cvCvtColor関数でBGRからARGBへの変換は定義されてないようだ(これも見つけられていないだけかも)。
しようがないので、地道に下の感じに変換してやる


frameImage = cvQueryFrame(capture);

// cvCvtColor(frameImage, imageAR, CV_BGR2ARGB);
for (int x=0; xwidth; x++) {
for (int y=0; yheight; y++) {
imageAR->imageData[y*frameImage->widthStep+4*x] = 255;
imageAR->imageData[y*frameImage->widthStep+4*x+1] = frameImage->imageData[y*frameImage->widthStep+3*x+2];
imageAR->imageData[y*frameImage->widthStep+4*x+2] = frameImage->imageData[y*frameImage->widthStep+3*x+1];
imageAR->imageData[y*frameImage->widthStep+4*x+3] = frameImage->imageData[y*frameImage->widthStep+3*x];
}
}


するとめでたく、ARToolKitのargDispImage関数でOpenCVのcvQueryFrameで取得した画像を表示できた。

<ここに至るまで>
  • Mac買ったから、これで開発の勉強しよう!!
  • OpenGLとかARToolKitとかも勉強したいな〜
  • おっ? 書籍だと大抵、Windowsでの開発が説明されている
  • 頑張ってMacでやってみたけど、まだまだMacに慣れない+Windowsと勝手が違う
  • ARToolKitとかなんとかは、おとなしく、windowsで勉強した方が良いかなあ。。。 ← いまここ・・・


この本で勉強してみました。

3Dキャラクターが現実世界に誕生! ARToolKit拡張現実感プログラミング入門3Dキャラクターが現実世界に誕生! ARToolKit拡張現実感プログラミング入門
価格:¥ 3,129(税込)
発売日:2008-09-17

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...