2017-06-09 8 views
1

OpenCVでOpenNV + PrimeSense + NiTEを使用していましたが、私のプロジェクトで距離に応じてオブジェクトを分割しました。しかし、私はNVIDIA Jetson TX1ボードに展開する予定でしたが、OpenCVでOpenNI + PrimeSense + NiTEをコンパイルすることはできませんでした。 私はlibfreenectで終わりました。しかし、libfreenectが提供する深度マップは非常に間違っています。私はいくつかの例を共有します。 OpenNI Depth MapLibfreenect間違った奥行きマップ

libfreenect間違った深度マップはここにある:

Libfreenect Depth Map私はOpenKinectのウェブサイトで、デフォルトのC++ラッパーに私libfreenectコードをベースとここ

はOpenNIの加工深さマップです。

誰かが私を助けることができますか?どうもありがとうございます。

答えて

1

まあ、ARMまたはAARCH64アーキテクチャ(主にJETSONのTX1)OpenNIとSensorKinectを構築するために問題があるためにlibfreenectで作業をしている人のために、 OpenNIとSensorKinectのソースをAarch64で動作させるために調整し、libfreenectの使用を避けました。

リンク:OpenNI for TX1およびSensorKinect for TX1

0

深度データの異なるマッピングのように見えます。

あなたは:: CVにlibfreenectデータを入れてマットを試してみて、それを拡張することができます

const float scaleFactor = 0.05f; 
depth.convertTo(depthMat8UC1, CV_8UC1, scaleFactor); 
imshow("depth gray",depthMat8UC1); 

また、この記事とJETSON TK1にbuilding OpenNI2にチェックアウトすることができます。 OpenNIの設定と作業が完了したら、ソースからOpenCVをコンパイルして、WITH_OPENNIcmakeに設定してください。その後あなたがOpenCVの中に直接奥行きデータをつかむことができる必要があります:

#include "opencv2/core/core.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 

#include <iostream> 

using namespace cv; 
using namespace std; 

const float scaleFactor = 0.05f; 

int main(){ 
cout << "opening device(s)" << endl; 

VideoCapture sensor; 
sensor.open(CV_CAP_OPENNI); 

if(!sensor.isOpened()){ 
    cout << "Can not open capture object 1." << endl; 
    return -1; 
} 

for(;;){ 
    Mat depth,depthScaled; 

    if(!sensor.grab()){ 
     cout << "Sensor1 can not grab images." << endl; 
     return -1; 
    }else if(sensor.retrieve(depth, CV_CAP_OPENNI_DEPTH_MAP)) { 
     depth.convertTo(depthScaled, CV_8UC1, scaleFactor); 
     imshow("depth",depth); 
     imshow("depth scaled",depthScaled); 
    } 

    if(waitKey(30) == 27) break; 



    } 
} 
関連する問題