2012-10-21 5 views
5

저는 Kinect SDK (1.6) DepthBasicsD2D C++ 예제를 사용하여 kinect에서 깊이 프레임을 가져 와서 데이터로 OpenCV에서 블랍 탐지를 수행하려고합니다.Kinect SDK 깊이 데이터 (C++)를 OpenCV로 변환 하시겠습니까?

예를 들어 OpenCV를 구성했으며 예제의 기본 작업을 이해했습니다.

하지만 어쨌든 Kinect에서 픽셀 데이터를 가져 와서 OpenCV의 IplImage/cv :: Mat 구조로 전달하는 방법을 찾는 데 도움이되지 않습니다.

이 문제에 대해 의견이 있으십니까?

답변

2

이것은 당신이 OpenCV의 표현에 KINECT 색상과 깊이 이미지와 깊이 이미지를 변환 할 수 있습니다 :

// get a CV_8U matrix from a Kinect depth frame 
cv::Mat * GetDepthImage(USHORT * depthData, int width, int height) 
{ 
    const int imageSize = width * height; 
    cv::Mat * out = new cv::Mat(height, width, CV_8U) ; 
    // map the values to the depth range 
    for (int i = 0; i < imageSize; i++) 
    { 
     // get the lower 8 bits 
     USHORT depth = depthData[i]; 
     if (depth >= kLower && depth <= kUpper) 
     { 
      float y = c * (depth - kLower); 
      out->at<byte>(i) = (byte) y; 
     } 
     else 
     { 
      out->at<byte>(i) = 0; 
     } 
    } 
    return out; 
}; 

// get a CV_8UC4 (RGB) Matrix from Kinect RGB frame 
cv::Mat * GetColorImage(unsigned char * bytes, int width, int height) 
{ 
    const unsigned int img_size = width * height * 4; 
    cv::Mat * out = new cv::Mat(height, width, CV_8UC4); 

    // copy data 
    memcpy(out->data, bytes, img_size); 

    return out; 
} 
+1

동적 이력서 :: 매트를 할당 할 필요가 없습니다. – vinjn