来自Kinect的深度馈送未更新

时间:2012-02-28 16:16:32

标签: c++ opencv libraries kinect depth

我正在使用OpenKinect和OpenCV库的组合,将类似Haar的特征识别应用于RGB和深度图像。

我可以使用RGB Feed获取实时反馈并成功检测物体,但深度给我带来了很大的问题。

在初始帧之后,深度帧似乎根本不更新。

提供原始数据的深度回调函数如下:

//depth callback function
void depth_cb(freenect_device *dev, void *v_depth, uint32_t timestamp)
{
    if (got_depth == 0){
        pthread_mutex_lock(&buf_mutex);

        //copy to OpenCV buffer
        memcpy(depthMat.data, v_depth, (640*480*2));
       // depthMat.convertTo(depthFrame, CV_8UC1, 256.0/2048.0);
        got_depth++;

        pthread_cond_signal(&frame_cond);
        pthread_mutex_unlock(&buf_mutex);
    }
}

使用的垫子是这样初始化的:

cv::Mat depthMat(cv::Size(640,480),CV_16UC1);
cv::Mat depthFrame(cv::Size(640,480),CV_8UC1);

在主要功能中,我尝试使用它们:

        depthMat.convertTo(depthFrame, CV_8UC1, 255.0/2048.0);

        imshow("rgb", rgbMat);
        imshow("depth-pre-conversion", depthMat);
        imshow("depth", depthFrame);

        IplImage depthImage = depthFrame;
        IplImage rgbImage = rgbMat;

        detect_and_draw(&depthImage);

'深度预转换'是一个几乎是黑色的框架,你可以在这里找出深度图像。它没有更新。

'深度'是较轻的版本,一旦转换为8位,它也不会移动。

'rgb'是实时RGB Feed,它没有问题(虽然它是BGR而不是RGB但我会在某些时候修复它,现在它不那么重要了)

我很感激您提供的任何建议和帮助。

0 个答案:

没有答案