c++ - 如何使用 Triclops 和 FlyCapture SDK 从 PointGrey BumbleBee2 立体相机创建深度图?

标签 c++ depth-buffer stereo-3d

我有 BumbleBee 2 立体相机和两个提到的 SDK。

我已经设法在我的程序中从中捕获视频,校正立体图像并获得视差图。接下来我想要的是一张类似于 Kinect 提供的深度图。

Triclops 的文档比较短,只提到了功能,没有典型的工作流程描述。工作流程在示例中进行了描述。

到目前为止,我发现了 2 个相关函数:triclopsRCDxxToXYZ() 函数系列和 triclopsExtractImage3d() 函数。

第一个系列的函数计算单个像素的 x、y 和 z 坐标。 Z 坐标完全对应于以米为单位的深度。但是,要使用此函数,我应该创建两个嵌套循环,如 stereo3dpoints 示例中所示。这带来了太多的开销,因为每次调用都会返回两个以上的坐标。

第二个函数,triclopsExtractImage3d(),总是返回错误TriclopsErrorInvalidParameter。文档只说“上下文和 TriclopsImage3d 之间存在几何不匹配”,这对我来说并不清楚。

Triclops 3.3.1 SDK 的示例没有说明如何使用它。谷歌带来example from Triclops SDK 3.2 ,这在 3.3.1 中不存在。

我已经尝试将上面链接中的第 253-273 行添加到当前的 stereo3dpoints - 遇到了这个错误。

有没有人有这方面的经验?

使用 triclopsExtractImage3d() 是否有效还是已过时?

我还尝试绘制从 triclopsRCDxxToXYZ() 获得的 disparityz 的值。

该图显示几乎完全成反比:enter image description here .

z = k/disparity。但是 k 在整个图像中并不是恒定的,它在大约 2.5e-5 到 1.4e-3 之间变化,这是两个数量级。因此,这个值计算一次,永远使用是不正确的。

最佳答案

也许有点晚了,你自己想通了,但是:

要使用 triclopsExtractImage3d,您必须先创建一个 3dImage。

TriclopsImage3d *depthImage;
triclopsCreateImage3d(triclopsContext, &depthImage);
triclopsExtractImage3d(triclopsContext, depthImage);
triclopsDestroyImage3d(&depthImage);

关于c++ - 如何使用 Triclops 和 FlyCapture SDK 从 PointGrey BumbleBee2 立体相机创建深度图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21775081/

相关文章:

c++ - 模板实例化错误,MSVC 与 GCC

c++ - 我想使用 64 位整数可以采用的完整范围。我如何在 x86 Visual Studio 2008 中执行此操作?

JavafX 8 3D Z 顺序。重叠形状行为是错误的。

opencv - 使用 OpenCV 的立体视觉

c++ - 为什么 StereoSGBM 给出负数和上面的 numberOfDisparities 数

c++ - 视差映射中的立体视觉

c++ - unique_ptr 相对于 auto_ptr 的优势?

c++ - 纠错码

c# - 如何禁用深度缓冲区?

directx-9 - 使 OpenGL PolygonOffset 和 DirectX9 DepthBias 表现相同