Libfreenect错误的深度图

时间:2017-06-09 03:53:00

标签: opencv kinect openni openkinect libfreenect2

我已经在我的项目中使用OpenNI + PrimeSense + NiTE和OpenCV根据距离对对象进行分割。但是我打算将它部署在NVIDIA Jetson TX1主板上,它无法用OpenCV编译OpenNI + PrimeSense + NiTE。 我结束了libfreenect。然而,libfreenect提供的深度图是非常非常错误的。我将分享一些例子。

这是OpenNI的工作深度图: OpenNI Depth Map

libfreenect错误的深度图在这里:Libfreenect Depth Map

我将我的libfreenect代码基于OpenKinect网站上的默认C ++包装器。

有人可以帮助我吗?非常感谢你。

2 个答案:

答案 0 :(得分:1)

那么,对于那些在ARM或AARCH64架构(主要是Jetson TX1)上使用libfreenect的人,因为OpenNI和SensorKinect构建有问题,我对OpenNI和SensorKinect源进行了一些调整,以便与Aarch64一起运行,并避免使用libfreenect

链接:OpenNI for TX1SensorKinect for TX1

答案 1 :(得分:0)

它看起来像深度数据的不同映射。

您可以尝试将libfreenect数据放入cv :: Mat并缩放:

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

您也可以在Jetson TK1上查看本文和building OpenNI2。 一旦你有OpenNI设置和工作,你应该能够从源WITH_OPENNI使用cmake编译OpenCV。之后,您应该能够直接在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;



   }
}