我正在使用 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,但我会在某个时候解决这个问题,它现在不太重要)
我将不胜感激您可以提供的任何建议和帮助。