如果我們知道相機與物體的距離,是否可以獲取由相機聚焦的物體的真實區域?例如,考慮我們正在拍攝距離已知距離的牆壁照片。是否有可能找到相機捕獲的牆壁區域。 這是一個Android應用程序,所以有什麼API可以幫助我。 我有一個公式,我們必須使用傳感器的高度,但正如我研究到它不可能找到所有手機的相機傳感器的大小。使用相機測量物體的面積以及相機與物體之間的已知距離
歡迎任何輸入。我在這裏先向您的幫助表示感謝。
如果我們知道相機與物體的距離,是否可以獲取由相機聚焦的物體的真實區域?例如,考慮我們正在拍攝距離已知距離的牆壁照片。是否有可能找到相機捕獲的牆壁區域。 這是一個Android應用程序,所以有什麼API可以幫助我。 我有一個公式,我們必須使用傳感器的高度,但正如我研究到它不可能找到所有手機的相機傳感器的大小。使用相機測量物體的面積以及相機與物體之間的已知距離
歡迎任何輸入。我在這裏先向您的幫助表示感謝。
我實際上已經解決了這個問題。我首先使用Camera.Parameters類的getVerticalViewAngle()和getHorizontalViewAngle()方法。我在下面的公式中使用它:
tan(θ/ 2)= x/2z 其中θ是我從上述方法獲得的角度,x是高度/寬度(取決於2種方法中的哪一種我正在使用),z是物體距相機的距離。
如果您已經正確測量了距離,以及您握住相機的角度(理想情況下它必須與@ type-alpha建議並行),結果相當準確。
Camera.Parameters cp = camera.getParameters();
double distance = Double.parseDouble(editText.getText().toString());
/*double height = distance * 2.57/cp.getFocalLength();
double width = distance * 3.42/cp.getFocalLength();*/
double realheight = 2 * distance * Math.tan(Math.toRadians(cp.getVerticalViewAngle()/2));
double realwidth = 2 * distance * Math.tan(Math.toRadians(cp.getHorizontalViewAngle()/2));
,我認爲這是可以做到,但:
a)包含手機和包含你的對象必須是平行的平面上的平面,也就是出自你的相機的線必須垂直於表面測量; b)您需要一個額外的校準步驟(僅在首次啓動應用程序時完成的一次性設置),例如,知道如何在屏幕上出現x米長的物體(x和y必須是已知的)。例如,知道1米距離內1米長物體的圖像需要多少像素。請注意,校準過程必須尊重a)。
在這一點上應該是基本幾何的問題,因爲該地區是這樣的距離的平方和lenght是成正比的距離。
實施例:
校準:物體1米和1米長的需要10個像素。所以你知道在1米處,屏幕上的100個像素形成一個連接表面,大致相當於1平方米。
問題實例:距離3米遠的物體佔用屏幕的150個像素。
解決方案:在2米處,100像素爲4平方公尺。在3米處,100像素爲9平方公尺。然後在3米處,你的150像素相當於13.5平方公尺。
請注意,在校準過程中,您可以使用面積而不是長度,但想法是相同的。
請注意,這隻適用於相機可以被視爲投影的起源,我不太確定。如果它不是投影的原點,則需要知道相機/手機平面與理想投影原點(應該是costant)之間的距離w。此時您使用與之前相同的過程,請記住,在進行任何計算之前,您必須添加w的每個距離。注意3(然後我停下來):您可以通過其他方式進行校準,例如瞭解同一對象在兩個不同距離處佔用的像素。
嘿我已經解決了這個問題。你可以參考我的答案below.Thanks你的幫助。 –