Глубина подачи от Kinect не обновляется - PullRequest
2 голосов
/ 28 февраля 2012

Я использую комбинацию библиотек 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, но я исправлю это в какой-то момент, сейчас это менее важно)

Буду признателен за любые советы и помощь, которые вы можете предложить.

...