ofxOpenNIでのRGB値取得方法in development

 
date:2011.02.03   posted by:mizutani
 

どうも!ミズタニキリンです!

ofxOpenNIでは現在(2011/02/03)デフォルトのコードではRGB値取得(カメラの映像表示)はできませんが、armadilluさんのFORKコードを使えばRGB表示ができます。(※ofxOpenNIのインストール/設定方法は前の記事「OpenNI+ofxopenni(openframeworks)+Mac」をご覧ください。)

1. コードのダウンロード
  1.1 下記ページよりコードをダウンロードしてください。
        https://github.com/armadillu/ofxOpenNI/commit/e56c22b4bf332f9639aa4a88bb8c3ee99317767f

  1.2 armadillu-ofxOpenNI-e56c22b/example/srcフォルダをofxOpenNI/example/srcフォルダにコピーします。

  1.3 armadillu-ofxOpenNI-e56c22b/srcフォルダをofxOpenNI/srcフォルダにコピーします。

 

2. コードの書き換え
  そのままのコードですとエラーが7つでて動きませんでした。なので修正します。修正箇所は以下の通りです。(自分はまだopenframeworks歴2日なのでこれよりもよい方法があればご指摘お願いします。)

armadillu-ofxOpenNI-e56c22b/example/src/testApp.cpp
  context.initFromXMLFile();
  
  context.setupUsingXMLFile();

armadillu-ofxOpenNI-e56c22b/src/ofxImageGenerator.cpp
  XnStatus nRetVal = image_generator.Create(*_context->getXnContext());
  
  XnStatus nRetVal = image_generator.Create(_context->getXnContext());

armadillu-ofxOpenNI-e56c22b/src/ofxOpenNIRecorder.cpp
  以下コードは解決方法がわからずとりあえずコメントアウトにしました。

  (1)
  result = recorder.AddNodeToRecording(image->getXnImageGenerator(), XN_CODEC_JPEG);
  
  //result = recorder.AddNodeToRecording(image->getXnImageGenerator(), XN_CODEC_JPEG);

  (2)
  xn::ImageGenerator& xn_image = image->getXnImageGenerator();
  
  //xn::ImageGenerator& xn_image = image->getXnImageGenerator();

  (3)
  if(xn_depth.IsCapabilitySupported(XN_CAPABILITY_FRAME_SYNC)) {
    if(xn_depth.GetFrameSyncCap().CanFrameSyncWith(xn_image)) {
        result = xn_depth.GetFrameSyncCap().FrameSyncWith(xn_image);
        CHECK_RC(result, “Enable frame sync”);
    }
  }
  
  /*if(xn_depth.IsCapabilitySupported(XN_CAPABILITY_FRAME_SYNC)) {
    if(xn_depth.GetFrameSyncCap().CanFrameSyncWith(xn_image)) {
        result = xn_depth.GetFrameSyncCap().FrameSyncWith(xn_image);
        CHECK_RC(result, “Enable frame sync”);
    }
  }*/

armadillu-ofxOpenNI-e56c22b/src/ofxTrackedUser.cpp
  depth_generator->getXnDepthGenerator()->ConvertRealWorldToProjective(2, rLimb.position, rLimb.position);
  
  depth_generator->getXnDepthGenerator().ConvertRealWorldToProjective(2, rLimb.position, rLimb.position);

armadillu-ofxOpenNI-e56c22b/src/ofxUserGenerator.cpp
  (1)
  ->FindExistingNode(XN_NODE_TYPE_USER, user_generator);
  
  .FindExistingNode(XN_NODE_TYPE_USER, user_generator);

  (2)
  result = user_generator.Create(*context->getXnContext());
  
  result = user_generator.Create(context->getXnContext());

armadillu-ofxOpenNI-e56c22b/src/ofxOpenNI.h
  以下コードは追加しなくても動きますが[roxlu/ofxOpenNI]にはこの記述があったので念のため追加しておきます。

  #include “ofxOpenNIRecorder.h”
  #include “ofxOpenNIXML.h”

 

3. 実行
[ビルドと実行]ボタンを押すと左にdepthの画面、右にRGBの画面が表示されるはずです。RGB画面の方は少し座標がずれているのでこれも修正する必要はあるでしょう。

【参考サイト】
  https://github.com/armadillu

 
Copyright © TheDesignium inc. powered by WordPress & mootools.
Relative Keyword|none