Получить переменные OpenCV Mat для rgb и информацию о глубине из pcl openni grabber

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

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

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

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

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

цветное изображениеглубина изображения

Другие вопросы по тегам