Я использую комбинацию библиотек OpenKinect и OpenCV для применения функции распознавания, подобной Haar, как для изображений 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);
«Преобразование глубины» представляет собой почти черную рамку, здесь вы можете почти разглядеть изображение глубины. Не обновляется.
«Глубина» - более легкая версия, однажды преобразованная в 8 бит, она также не перемещается.
'rgb' - это живая лента RGB, которая работает без проблем (хотя это скорее BGR, чем RGB, но я исправлю это в какой-то момент, сейчас это менее важно)
Буду признателен за любые советы и помощь, которые вы можете предложить.