2015-03-06 3 views
0

Теперь я использую pcl openni grabber, чтобы получить облако точек от камер kinect. Но я также хочу получить переменные Matrix OpenCV для информации rgb и глубины.получить переменные OpenCV Mat и информацию о глубине от pcl openni grabber

Кто-нибудь знает, как этого достичь?

Большое спасибо!

+0

Является ли это потоковое видео или изображение из одной точки облака? – Lilly

ответ

0

Я только что нашел, что 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); 
} 

В этом случае я могу получить цветное изображение справа. Однако изображение глубины не выглядит правильным.

color image depth image

+0

изображение глубины находится в 16-битном значении (без знака int), и они имеют значения в milimiters. Просто используйте функцию нормализации OpenCV для ее отображения (не сохраняйте это изображение, сохраняйте исходный). 'cv :: normalize (D1, nice_output, 0, 255, CV_MINMAX, CV_8UC1);' должен выполнять работу;) – api55