2012-10-21 22 views
5

Kinect SDK (1.6) DepthBasicsD2D C++ örneğini kullanarak derinlik çerçevesini kinect'ten alıyorum ve verilerle OpenCV'de blob tespiti yapmak istiyorum.Kinect SDK Derinlik Verileri (C++) OpenCV'ye mi?

Örnekle OpenCV'yi yapılandırdım ve ayrıca örneğin temel çalışmasını anladım.

Ama bir şekilde herhangi bir yerde yardım yok ve Kinect'ten piksel verilerini nasıl alacağımı ve OpenCV'nin IplImage/cv :: Mat yapısına nasıl geçeceğini anlamak zor.

Bu sorun hakkında herhangi bir düşünce var mı?

cevap

2

Bu OpenCV temsillerine Kinect renk ve derinlik görüntüleri ve derinlik görüntüleri dönüştürmek yardımcı olabilir:

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

dinamik cv :: Mat ayırmaya gerek yoktur. – vinjn