java - 如何使用 Project Tango 拍摄高分辨率照片并同时感测深度

标签 java android google-project-tango

如何使用 Project tango 拍照?

我读了这个答案:Using the onFrameAvailable() in Jacobi Google Tango API

它适用于抓取帧,但图像质量不太好。是否有等效的 takePicture ?

注意java API

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

不提供RGB数据。如果我使用 Android 相机拍照,Tango 无法感知深度。在那里我必须使用 TangoCameraPreview。

谢谢

最佳答案

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

我不想使用 TangoCameraPreview 而是调用 Tango.connectTextureId()Tango.updateTexture()我自己将帧像素加载到 OpenGL 纹理中,然后我可以根据需要使用它。这正是 TangoCameraPreview 在幕后所做的事情。

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

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

关于java - 如何使用 Project Tango 拍摄高分辨率照片并同时感测深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978991/

相关文章:

java - JSONException : value <html> of type java. 无法将 lang.string 转换为 JSONObject

android - 从四元数旋转到角度 (0 - 360°)

java - 探戈项目 : Export ADF to sdcard

google-project-tango - 如何从 c#/Unity 设置探戈相机曝光和 iso 参数

java - 如何将@string资源放入特定代码中?

java - HTTP 入站适配器 区分支持的方法

java - 安卓开关/外壳

android - 登录在 Ionic View 应用程序中不起作用

android - 带有额外变量的 gson 数组反序列化

java - ICEFaces 的异常(exception)情况