【问题标题】:Libfreenect wrong depth mapLibfreenect 错误的深度图
【发布时间】:2017-11-10 22:54:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: opencv kinect openni openkinect libfreenect2


    【解决方案1】:

    好吧,对于那些在 ARM 或 AARCH64 架构(主要是 Jetson TX1)上使用 libfreenect 的人来说,因为 OpenNI 和 SensorKinect 的构建存在问题,我对 OpenNI 和 SensorKinect 源代码进行了一些调整,以便在 Aarch64 上运行并避免使用 libfreenect .

    链接:OpenNI for TX1SensorKinect for TX1

    【讨论】:

      【解决方案2】:

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

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

      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;
      
      
      
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-04-14
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 2015-02-28
        • 2014-07-17
        • 2019-07-30
        • 2019-08-06
        • 2021-07-28
        相关资源
        最近更新 更多