【问题标题】:How to take high-res picture while sensing depth using project tango如何在使用探戈项目感应深度的同时拍摄高分辨率照片
【发布时间】:2015-04-30 22:38:52
【问题描述】:

如何使用 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 数据。如果我使用安卓相机拍照,探戈无法感知深度。在那里我将不得不使用 TangoCameraPreview。

谢谢

【问题讨论】:

    标签: java android google-project-tango


    【解决方案1】:

    您不必使用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 中,您可以使用 framebufferrenderbuffer 来执行此操作。

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

    【讨论】:

    • 我浏览了您的代码,它似乎与我的问题中列出的答案相似。两者都可以,但它们不会产生清晰的高分辨率图像。在渲染和保存到文件之前捕获显示缓冲区只是捕获视频帧的一种技巧。我正在寻找一种类似于 android 中的 takePicture() 的方法,这样每当我按下按钮时——我都有全高清图像、自动对焦以及深度图和相机姿势。将来我可以进行后期处理以从图像中提取各种内容,例如特征、颜色、像素到深度映射等。
    • 我认为在您需要拍摄时不断开 Tango 是不可能的,即使这样也有很高的延迟。
    • 投了赞成票,因为您窥探了罐子并找到了来源 - 很尴尬我自己错过了那个 :-( 感谢您的精彩捕捉!也就是说,文档似乎强烈表明抓住相机意味着探戈不能做点云(据我了解,姿势来自鱼眼)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多