我正在使用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但我会在某些时候修复它,现在它不那么重要了)
我很感激您提供的任何建议和帮助。