【问题标题】:get OpenCV Mat variables of rgb and depth information from pcl openni grabber从 pcl openni 抓取器获取 rgb 的 OpenCV Mat 变量和深度信息
【发布时间】:2016-01-07 18:42:19
【问题描述】:

我现在正在使用 pcl openni 抓取器从 kinect 相机获取点云。但我也想获取 rgb 和深度信息的 OpenCV Mat 变量。

有谁知道如何做到这一点?

非常感谢!

【问题讨论】:

  • 是视频流还是来自单点云的图像?

标签: opencv kinect openni point-cloud-library


【解决方案1】:

我刚刚发现 pcl 有自己的 openni2 包装器,可以直接获取颜色和深度图像。我们可以这样写一个回调函数:

void PclProcessor::image_cb1_ (const boost::shared_ptr<pcl::io::Image>& rgb1, const boost::shared_ptr<pcl::io::DepthImage>& depth1, float reciprocalFocalLength)
{
    if (refreshK1)
    {
        C1 = Mat(rgb1->getHeight(), rgb1->getWidth(), CV_8UC3);
        rgb1->fillRGB(C1.cols,C1.rows,C1.data,C1.step);
        cvtColor(C1, C1, CV_RGB2BGR);

        D1 = Mat(depth1->getHeight(), depth1->getWidth(), CV_32F);
        depth1->fillDepthImage(D1.cols, D1.rows,(float *)D1.data,D1.step);

        refreshK1 = false;
    }
    imshow("camera 1 color",C1);
    imshow("camera 1 depth",D1);
    cv::waitKey(0);
}

在这种情况下,我可以得到正确的彩色图像。但是,深度图像看起来不正确。

【讨论】:

  • 深度图像为 16 位值(无符号整数),它们的值以限制器为单位。只需使用 OpenCV 的 normalize 功能来显示它(不要保存此图像,保存原始图像)。 cv::normalize(D1, nice_output , 0, 255, CV_MINMAX, CV_8UC1); 应该做的工作;)
猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 2013-03-14
  • 2015-05-30
相关资源
最近更新 更多