【发布时间】:2016-01-07 18:42:19
【问题描述】:
我现在正在使用 pcl openni 抓取器从 kinect 相机获取点云。但我也想获取 rgb 和深度信息的 OpenCV Mat 变量。
有谁知道如何做到这一点?
非常感谢!
【问题讨论】:
-
是视频流还是来自单点云的图像?
标签: opencv kinect openni point-cloud-library
我现在正在使用 pcl openni 抓取器从 kinect 相机获取点云。但我也想获取 rgb 和深度信息的 OpenCV Mat 变量。
有谁知道如何做到这一点?
非常感谢!
【问题讨论】:
标签: opencv kinect openni point-cloud-library
我刚刚发现 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);
}
在这种情况下,我可以得到正确的彩色图像。但是,深度图像看起来不正确。
【讨论】:
cv::normalize(D1, nice_output , 0, 255, CV_MINMAX, CV_8UC1); 应该做的工作;)