我正在尝试将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坐标,输入centerX和来自rgb帧的centerY:
float centerX, centerY, centerZ;
registration->getPointXYZ(&undistorted, center.y, center.x, centerX, centerY, centerZ);
使用此代码,输出始终是错误的。大部分时间都是“inf”或“-inf”值。当我在已注册的帧上执行跟踪算法时,输出(距离)是正确的,虽然我不能使用已注册的帧,因为我需要分析RGB帧。
我也尝试将getPointXYZ()中的“undistorted”更改为“depth2rgb”,但没有成功:(
有没有办法让RGB值超出已注册的帧?