2

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

我可以使用 RGB 提要获得实时提​​要并成功检测对象,但是深度给我带来了很多问题。

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

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

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

'Depth-pre-conversion' 是一个几乎是黑色的框架,你可以在这里制作深度图像。它不更新。

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

'rgb' 是实时 RGB 源,没有问题(虽然它是 BGR 而不是 RGB,但我会在某个时候解决这个问题,它现在不太重要)

我将不胜感激您可以提供的任何建议和帮助。

4

0 回答 0