2017-05-22 6 views
-1

Pour le code suivant:Pourquoi toutes les coordonnées de QueryVertices sont-elles nulles?

Reads the depth data from the sensor and fills in the matrix 
***/ 
void SR300Camera::fillInZCoords() 
{ 
    Image::ImageData depthImage; 
    Image *depthMap = sample->depth; 
    depthMap->AcquireAccess(Image::ACCESS_READ, &depthImage); 
    Image::ImageInfo imgInfo = depthMap->QueryInfo(); 
    int depth_stride = depthImage.pitches[0]/sizeof(pxcU16); 
    Projection * projection = device->CreateProjection(); 
    unsigned int wxhDepth = depth_width * depth_height; 
    Point3DF32* vertices = new Point3DF32[wxhDepth]; 
    projection->QueryVertices(depthMap, vertices); 
    pxcU16 *dpixels = (pxcU16*)depthImage.planes[0]; 
    unsigned int dpitch = depthImage.pitches[0]/sizeof(pxcU16); /* aligned width */ 

    for (int k = 0; k < wxhDepth; k++) { 
     cout << "xx is " << vertices[k].x << endl; 
     cout << "yy is " << vertices[k].y << endl; 
     cout << "zz is " << vertices[k].z << endl; 
    } 

} 

Je viens d'obtenir zéro pour tout imprimé. Il est dit dans la documentation du SDK afin de convertir les coordonnées de l'image en profondeur de la carte UV en pixels à xyz-map de realworld en mm QueryVertices. Cependant, pour moi, il retourne juste 0. Je reçois à la fois une image en couleur et en profondeur et je ne suis pas sûr de ce qui a mal tourné. est ici plus d'informations de débogage du code: enter image description here

*

-  vertices 0x00000261e4934040 {x=0.000000000 y=0.000000000 z=0.000000000 } Intel::RealSense::Point3DF32 * 
     wxhDepth 307200 unsigned int 
-  depthImage.pitches 0x00000075a2da9de0 {1280, 0, 0, 0} int[4] 
-  planes 0x00000075a2da9df0 {0x00000261e7542000 "", 0x0000000000000000 <NULL>, 0x0000000000000000 <NULL>, 0x0000000000000000 <NULL>} unsigned char *[4] 
+  reserved 0x00000075a2da9dd4 {0, 0, 0} int[3] 
     format PIXEL_FORMAT_DEPTH (131072) Intel::RealSense::Image::PixelFormat 

*

Répondre

0

Voici la réponse correcte pour obtenir le xyzMap de l'image de profondeur UVmap:

PXCImage::ImageData depthImage; 
depthMap->AcquireAccess(PXCImage::ACCESS_READ, &depthImage); 
PXCImage::ImageInfo imgInfo = depthMap->QueryInfo(); 
depth_width = imgInfo.width; 
depth_height = imgInfo.height; 
num_pixels = depth_width * depth_height; 
PXCProjection * projection = device->CreateProjection(); 
PXCPoint3DF32 *pos3D = new PXCPoint3DF32[num_pixels]; 
sts = projection->QueryVertices(depthMap, &pos3D[0]); 
if (sts < Status::STATUS_NO_ERROR) { 
    wprintf_s(L"Projection was unsuccessful! \n"); 
    sm->Close(); 
}