我正在尝试将 libfreenect RGB 坐标转换为 DEPTH 坐标,以便找到 z 坐标(对象的距离)。我尝试了很多东西,但我无法得到正确的解决方案。有任何想法吗?
我正在使用 rgbmat 来应用卡尔曼滤波器。所以我只有一个对象的 RGB 中心坐标:
libfreenect2::Frame undistorted(512, 424, 4), registered(512, 424, 4), depth2rgb(1920, 1080 + 2, 4);
libfreenect2::Frame *rgb = frames[libfreenect2::Frame::Color];
Mat(rgb->height, rgb->width, CV_8UC4, rgb->data).copyTo(rgbmat);
registration->apply(rgb, depth, &undistorted, ®istered, true, &depth2rgb);
从未失真的帧中查找 xyz 坐标,输入来自 rgb 帧的 centerX 和 centerY:
float centerX, centerY, centerZ;
registration->getPointXYZ(&undistorted, center.y, center.x, centerX, centerY, centerZ);
使用此代码,输出总是错误的。大多数时候“inf”或“-inf”值。当我对注册帧执行跟踪算法时,输出(距离)是正确的,尽管我不能使用注册帧,因为我需要分析 RGB 帧。
我还尝试将 getPointXYZ() 中的“未失真”更改为“depth2rgb”,但没有成功:(
有没有办法从注册帧中获取 RGB 值?