2015-04-30 104 views
0

如何使用項目探戈拍攝照片?如何使用項目探戈拍攝高分辨率圖片

我讀到這樣的回答: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相機拍照,探戈不能感知深度。在那裏我將不得不使用TangoCameraPreview。

感謝

回答

2

您不必使用TangoCameraPreview獲得幀的Java。這真的只是一個便利的課程,幫助您在屏幕上獲得視頻。它似乎完全在Java中實現,調用了com.google.atap.tangoservice.Tango(即沒有調用未發佈的API)。事實上,如果您查看Tango SDK jar文件,您可以看到有人意外地包含了源文件的一個版本 - 它有一些diff標註並且可能不是最新版本,但檢查它仍然有啓發性。

我不喜歡使用TangoCameraPreview,而是叫Tango.connectTextureId()Tango.updateTexture()自己幀的像素加載到一個OpenGL紋理然後我就可以但是我想要使用。這正是TangoCameraPreview所做的。

在純Java中捕獲幀的最佳方式是將紋理以其確切大小(1280x720)繪製到屏幕外緩衝區並讀回。這也具有將紋理從其具有的任何YUV格式轉換成RGB(可能或不可取)的副作用。在OpenGL ES中,您使用framebufferrenderbuffer來執行此操作。

將framebuffer/renderbuffer的東西添加到已經可以渲染到屏幕的程序並不是很多代碼 - 大概與保存文件所需的數量相當 - 但是當你做的時候很難做到這是第一次。我創建了一個Android Studio sample capture app,它可以將Tango紋理作爲PNG保存到圖片文件夾(當您點擊屏幕時),以防萬一對任何人都有幫助。

+1

我瀏覽了你的代碼,它似乎與我的問題中列出的答案類似。兩者都可以工作,但不會產生尖銳的高分辨率圖像。在渲染和保存到文件之前捕獲顯示緩衝區只是捕獲視頻幀的黑客。我正在尋找一種類似於android中的takePicture()方法,以便每當我按下一個按鈕 - 我有全高清圖像,自動對焦,以及深度圖和相機姿勢。我可以進行後期處理,以便將來從圖像中提取各種東西,如特徵,顏色,像素到深度映射等。 –

+0

當你需要拍攝時,如果沒有斷開Tango,我認爲這是不可能的,即使這樣做會有很高的延遲。 – rhashimoto

+0

Upvoted,因爲你窺探了罐子,發現了源代碼 - 尷尬,我錯過了那個自己:-(謝謝你的好消息!也就是說,這些文檔似乎強烈地表明,抓住相機意味着探戈不能做點雲據我所知,姿勢來自魚眼) –

相關問題