Android ndk 项目探戈点云奇怪的崩溃,和密集的深度图
我正在尝试使用Project Tango C API,但在使用以下代码进行一些测试后,如果点云的数量超过~6.5k,则应用程序将崩溃,不会出现错误Android ndk 项目探戈点云奇怪的崩溃,和密集的深度图,android-ndk,google-project-tango,Android Ndk,Google Project Tango,我正在尝试使用Project Tango C API,但在使用以下代码进行一些测试后,如果点云的数量超过~6.5k,则应用程序将崩溃,不会出现错误 int width = mImageSource->getDepthImageSize().x; int height = mImageSource->getDepthImageSize().y; double fx = mImageSource->calib.intrinsics_d.projectionP
int width = mImageSource->getDepthImageSize().x;
int height = mImageSource->getDepthImageSize().y;
double fx = mImageSource->calib.intrinsics_d.projectionParamsSimple.fx;
double fy = mImageSource->calib.intrinsics_d.projectionParamsSimple.fy;
double cx = mImageSource->calib.intrinsics_d.projectionParamsSimple.px;
double cy = mImageSource->calib.intrinsics_d.projectionParamsSimple.py;
memset(inputRawDepthImage->GetData(MEMORYDEVICE_CPU), -1, sizeof(short)*width*height);
for (int i = 0; i < XYZ_ij->xyz_count; i++) {
float X = XYZ_ij->xyz[i*3][0];
float Y = XYZ_ij->xyz[i*3][1];
float Z = XYZ_ij->xyz[i*3][2];
if (Z < EPSILON || (X < EPSILON && -X < EPSILON) || (Y < EPSILON && -Y < EPSILON) || X != X || Y != Y || Z != Z)
continue;
int x_2d = (int)(fx*X/Z+cx);
int y_2d = (int)(fy*Y/Z+cy);
if (x_2d >=0 && x_2d < width && y_2d >= 0 && y_2d < height && (x_2d != 0 || x_2d != 0)) {
inputRawDepthImage->GetData(MEMORYDEVICE_CPU)[x_2d + y_2d*width] = (short) (Z*1000);
} else {
continue;
}
}
但是,如果我使用int I=0;i谢谢你的建议 在查找深度样本坐标的代码中
for (int i = 0; i < XYZ_ij->xyz_count; i++) {
float X = XYZ_ij->xyz[i*3][0];
float Y = XYZ_ij->xyz[i*3][1];
float Z = XYZ_ij->xyz[i*3][2];
…您应该使用i的索引,而不是i*3。它是一个二维阵列,因此您不必自己管理更高维度的步幅
SDK不提供填充没有深度样本的位置的调用,这可能是因为有许多方法具有不同的权衡。上的维基百科页面是一个合理的起点。在中有一个到的接口
SDK将只向您提供最新的彩色图像。如果您想要一个先前的图像,例如,具有接近深度样本的时间戳,您必须自己管理该图像。由于在两种模式下使用相同的摄影机时,无法获得与深度采样完全相同的时间戳的彩色图像,因此理论上应该应用外部姿势来对齐它们。实际上,如果在时间戳之间的0.5帧时间内运动很小,我想大多数人都会忽略它。非常感谢。我试图通过预乘1,0,0使用Tangopa;0, 0, -1; 0,1,0表示旋转矩阵,旋转矩阵由四元数组成,tx,tz,-ty表示平移。然而,这种跟踪信息似乎与深度数据不一致。