2014-04-24 88 views
7

我的設備只有兩種對焦模式,AUTO和FIXED(按照getSupportedFocusModes())。 我想將相機設置在'x'的固定焦距(x是我喜歡的任何物體,或者我可以從相機獲得的任何物體)。 (我知道setFocusMode(Camera.Parameters.FOCUS_MODE_FIXED),但是這似乎只能在最大可能的設置下修復。)在Android上設置控制固定距離的相機焦點

這可以完成嗎? (Android版本4.2.2)

回答

8

沒有試圖完全回答這裏的問題,只是試圖給它一些方向。
所以,你需要的是這種操作的驅動程序支持。然後,在某個時候,您可以從應用程序中請求驅動程序設置要求的焦距。

另一個問題是:「如果有人真的需要這種功能?」。

Android文檔說:

公共靜態最後絃樂FOCUS_MODE_FIXED
對焦固定。如果焦點不可調節,相機始終處於此模式。如果相機具有自動對焦,此模式可以固定焦點,通常在超焦距。應用程序不應該在此模式下調用autoFocus(AutoFocusCallback)。

讓我們看看超焦距是多少。

超焦距
維基百科,免費百科全書

在光學和攝影,超焦距超出的所有對象可以被帶入「可接受的」焦點的距離。有兩種常用的超焦距的定義,導致只有輕微的差異:

定義1:超焦距是最近的距離,在該距離下鏡頭可以聚焦,同時保持物體在無限遠處可接受的銳利。當鏡頭聚焦在這個距離時,距超焦點距離的一半到無限遠的所有物體都將是可接受的尖銳。定義2:超焦距是所有物體都可以接受的尖銳的距離,對於聚焦在無限遠處的鏡頭來說。

兩種含義之間的區別很少做,因爲它們具有幾乎相同的值。根據第一個定義計算出的值比第二個定義的值高一個焦距。

由於超焦距是提供最大景深的焦距,因此它是設置定焦相機焦距的最理想距離。

因此,焦點不是設置在最遠的可能設置上,而是設置爲讓所有可見物體都可以接受爲銳利。

回到問題。
如果您恰好是該特定相機固件的開發人員,則可以將任何所需的IOCTL添加到您的驅動程序中。但是,你仍然需要以某種方式給他們打電話。如果不在Android OS中增加額外的功能,以及進一步重新編譯Android本身及其底層Linux內核,就無法實現這一點。
所以看起來你不能實現這個目標,至少不能從用戶空間中獲得。

+0

要回答你的第二個問題:我向你保證,我需要那種功能.. :) 其次,我怕這個答案,但希望仍然存在某種欺騙來模擬這種行爲。謝謝。 – Ysch

+0

我知道人們不會在這裏發佈他們的問題來得到沒有答案,但在這種情況下,它不是肯定的。你的任務不是不可能的,但爲了實現它,你需要在android,相機的驅動程序和內核中進行更改。我不知道任何相機是否允許任何第三方軟件按照要求的方式移動鏡頭。有什麼可以幫助的是通過USB連接的第三方傳感器,@Jay Snayder的答案看起來很有希望。或者您可以儘量不要擔心焦點,只需在您感興趣的對象出現時以固定模式拍照。 – mykolaj

+0

您確實需要定製相機固件和HAL(它是Android系統的一部分),但很可能不需要重新編譯Linux內核。 –

1

實現該固定焦距的一種潛在方法是在攝像機生命週期開始時調用autoFocus。保持調用autoFocus,直到滿足條件。一旦滿足條件,則不是調用autoFocus,而是設置一個標誌並調用takePicture。

這是一個解決方案,我已經來爲了獲得您可能期望達到的預期效果。

所以我線程連續拍照中,代碼看起來是這樣的:

if(needsFocus) 
{ 
    myCamera.autoFocus(autoFocusCallback); 
} 
else //Focus is not needed anymore at this point 
{ 
    if(myCamera != null) 
    { 
     myCamera.startPreview();  
     myCamera.takePicture(pictureCallback); 
    } 
} 

一旦條件滿足,needsFocus設置爲true。在這一點上,重點是固定在我想要的地方。然後在整個活動任務中不會改變。我的情況的條件是用OpenCV庫檢測到的特定對象的外觀。

+0

看起來有趣,將盡快檢查這是否適用於我的情況。謝謝。 – Ysch

0

我可能是錯的,但是你說出你的問題的方式似乎來自經典的DSLR鏡頭視角。

在安卓手機攝像頭上,除非移動攝像頭允許,否則實際上並不需要擔心鏡頭焦距的大部分問題(似乎並非如此,因爲您提到它只允許自動或固定的,而不是無限的,宏觀,連續視頻等)。

您可以在相機上設置局部區域來進行對焦並讓sdk完成其工作。如果相機圖像上的物體遠離或靠近,sdk工作就會相應計算並聚焦於您。

舉一個例子,try this open-source camera project.

+0

謝謝,但這真的不是我要找的.. – Ysch