기존의 Camera API는 카메라를 카메라로 보았다면


Android 5.0이상에서는 카메라는 센서처럼 취급한다.


camera2 api 강좌 : http://myandroidarchive.tistory.com/1


우선 카메라의 화각 계산 공식은 아래 사이트에서 볼 수 있다.


Calculation Field of View : http://www.bobatkins.com/photography/technical/field_of_view.html


이전 코드와 변경사항은 아래 코드가 추가되었다는 점이다.


float horizonalAngle;
float verticalAngle;

private void calculateFOV(CameraManager cManager) {
try {
for (final String cameraId : cManager.getCameraIdList()) {
CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId);
int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
if (cOrientation == CameraCharacteristics.LENS_FACING_BACK) {
float[] maxFocus = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS);
SizeF size = characteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE);
float w = size.getWidth();
float h = size.getHeight();
horizonalAngle = (float) (2*Math.atan(w/(maxFocus[0]*2)));
verticalAngle = (float) (2*Math.atan(h/(maxFocus[0]*2)));
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}

먼저, LENS_INFO_AVAILABLE_FOCUS_LENGTHS는 카메라가 사용가능한 렌즈의 초점거리를 얻기 위하여 사용하였다.


다음으로 SENSOR_INFO_PHYSICAL_SIZE는 센서의 크기를 불러오기 위해 사용하였다.


이 값을 이용하여 수직, 수평 FOV각도 값을 구할 수 있다.


FOV (rectilinear) =  2 * arctan (frame size/(focal length * 2))



GitHub : https://github.com/pchan1401-ICIL/Camera2FOV

+ Recent posts