有没有办法在Java中访问探戈pointcloud相机图像像素

时间:2015-01-12 00:07:26

标签: google-project-tango

所以我知道setSurface,使用它作为叠加层或其他任何东西没有问题 - 它在表面控制上。也就是说,我很难获得像素数据

1)我已经尝试了所有我能想到的(控件,根等)来使用绘图缓存函数来获取相机表面的位。呀,不。缓存的位图始终为零。

2)我已成功使用SurfaceView和GLSurfaceView作为setSurface taget。我不能使用任何其他类,如TextureView。

3)我已经调查了C API,我看到相机公开了connectOnFrameAvailable,这将让我可以访问像素

我的猜测是内部探戈逻辑只是使用java中的表面来获取对底层位传输通道的访问 - 在C API中它需要一个纹理ID,这让我怀疑在一天结束时,相机数据很快被发送到GPU,我敢打赌CUDA lib对它进行操作 - 考虑到事情的状况,我看不出如何在不支持设备的情况下获取Java端的位 - 只是因为我有纹理或简单的表面视图在屏幕上渲染原始位并不意味着我可以到达它们。

我不想将图像数据从GPU中剥离出来。我需要将忙碌的动画从手表切换到日历。

在深入研究C API之前,有什么方法可以用Java获取相机位?我真的希望能够将它们与特定的姿势联系起来,但是现在我甚至无法弄清楚如何获得它们。我真的想知道3D点的位置和颜色。相机内在函数,点云和生成点云的2D图像都是我需要的。但是,如果我无法获得像素,我就无法做任何事情,而且图像与(姿势和点云)之间的关系越是值得怀疑,任何努力都会变得更加模糊。

如果我深入了解C,那么connectOnFrameAvailable会给我我需要的东西吗?点云生成的同步程度如何?哦,我有这个权利吗?彩色摄像机用于深度,鱼眼用于姿势?

我可以混合使用Java和C,即在Java中创建Tango实例,然后只使用C来解决图像问题吗?或者我将不得不重新实现C中的所有内容并停止使用探戈java jar?

1 个答案:

答案 0 :(得分:0)

  • connectOnFrameAvailable会给我我需要的东西吗?

是的,它确实返回了YUV字节缓冲区。

  • 点云生成的同步程度如何?

Tango API本身不提供彩色图像和深度点云之间的同步,但它确实提供了允许您在应用程序级别同步的时间戳。

  • 彩色相机用于深度,鱼眼用于姿势?

是的,你是对的。

  • 我可以混合Java和C(即用Java创建一个Tango实例,然后只用C来解决图像问题) 开始两个Tango实例真的不是Tango支持的方式,即使它有效,它也会非常hacky ..

作为temp walk-around,你可能会尝试使用视图的绘图缓存?