0

如何使用项目探戈拍照?

我读了这个答案:在 Jacobi Google Tango API 中使用 onFrameAvailable()

这适用于抓取框架,但图片质量不是很好。有没有 takePicture 等价物?

注意java API

        public void onFrameAvailable(int cameraId) {
            if (cameraId == TangoCameraIntrinsics.TANGO_CAMERA_COLOR) {
                mTangoCameraPreview.onFrameAvailable();
            }
        }

不提供 RGB 数据。如果我使用安卓相机拍照,探戈无法感知深度。在那里我将不得不使用 TangoCameraPreview。

谢谢

4

1 回答 1

2

您不必使用TangoCameraPreview在 Java 中获取帧。它实际上只是一个方便的类,用于帮助在屏幕上获取视频。它似乎完全用 Java 实现,并调用了com.google.atap.tangoservice.Tango(即不调用未发布的 API)。事实上,如果您查看 Tango SDK jar 文件,您会发现有人不小心包含了源文件的一个版本——它有一些差异注释,可能不是最新的,但检查它仍然是有启发性的。

我宁愿不使用,TangoCameraPreview而是调用我自己将帧像素加载到 OpenGL 纹理中,然后我可以随意使用它。这正是幕后所做的。Tango.connectTextureId()Tango.updateTexture()TangoCameraPreview

在纯 Java 中捕获帧的最佳方法是以精确大小 (1280x720) 将纹理绘制到屏幕外缓冲区并读回。这也具有将纹理从它具有的任何 YUV 格式转换为 RGB 的副作用(这可能是可取的,也可能不是可取的)。在 OpenGL ES 中,您可以使用framebufferrenderbuffer来执行此操作。

将帧缓冲区/渲染缓冲区内容添加到已经可以渲染到屏幕的程序中并不需要很多代码 - 大约与保存文件所需的数量相当 - 但是当你第一次这样做时要正确是很棘手的时间。我创建了一个 Android Studio示例捕获应用程序,它将 Tango 纹理作为 PNG 保存到图片文件夹(当您点击屏幕时),以防对任何人有帮助。

于 2015-05-01T18:42:01.613 回答