2012-10-21 22 views
5

Używam przykładu Kinect SDK (1.6) DepthBasicsD2D C++, aby zabrać ramkę głębokości z kinect i chcę przeprowadzić wykrywanie blob w OpenCV z danymi.Dane głębi SDK Kinect (C++) do OpenCV?

Skonfigurowałem OpenCV na przykładzie i zrozumiałem podstawowe działanie przykładu.

Ale jakoś nigdzie nie ma pomocy i trudno jest wymyślić, jak wziąć dane pikseli z Kinect i przejść do struktury IplImage/cv :: Mat OpenCV.

Każda myśl o tym problemie?

Odpowiedz

2

Może to pomóc w konwersji Kinect i głębią kolorów obrazów i zdjęć głębokości do reprezentacji OpenCV:

// 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

Nie ma potrzeby, aby dynamicznie przydzielać cv :: Mat. – vinjn