Сейчас я пытаюсь написать аналогичный код для камеры PMD для 3D-камеры Intel RealSense (SR300). Однако я не могу найти метод, который делает то же самое в RealSense SDK. Есть ли хак для этого или что вы предлагаете?
pmdGet3DCoordinates(PMDHandle hnd, float * data, size_t size);
пример использования:
float * cartesianDist = new float[nRows*nCols*3];
res = pmdGet3DCoordinates(hnd, cartesianDist, nCols*nRows*3*sizeOf(float));
Мне нужна эта функция для создания xyzmap, как в приведенном ниже коде:
int res = pmdGet3DCoordinates(hnd, dists, 3 * numPixels * sizeof(float));
xyzMap = cv::Mat(xyzMap.size(), xyzMap.type(), dists);
Я написал следующий код до сих пор, я не знаю, имеет ли это смысл с точки зрения Intel RealSense. Пожалуйста, не стесняйтесь комментировать.
void SR300Camera::fillInZCoords()
{
//int res = pmdGet3DCoordinates(hnd, dists, 3 * numPixels * sizeof(float)); //store x,y,z coordinates dists (type: float*)
////float * zCoords = new float[1]; //store z-Coordinates of dists in zCoords
//xyzMap = cv::Mat(xyzMap.size(), xyzMap.type(), dists);
Projection *projection = pp->QueryCaptureManager()->QueryDevice()->CreateProjection();
std::vector<Point3DF32> vertices;
vertices.resize(bufferSize.width * bufferSize.height);
projection->QueryVertices(sample->depth, &vertices[0]);
xyzBuffer.clear();
for (int i = 0; i < bufferSize.width*bufferSize.height; i++) {
//cv::Point3f p;
//p.x = vertices[i].x;
//p.y = vertices[i].y;
//p.z = vertices[i].z;
//xyzBuffer.push_back(p);
xyzBuffer.push_back(cv::Point3f(vertices[i].x, vertices[i].y, vertices[i].z));
}
xyzMap = cv::Mat(xyzBuffer);
projection->Release();
}
xyzmap
? Матрица мудрая - person Rick M.   schedule 16.05.2017