【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 フォーカス距離
android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。
Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersのフォーカス距離に関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。
フォーカス距離
カメラデバイスの近フォーカス距離・最適フォーカス距離・遠フォーカス距離の各フォーカス距離を取得することができます。Camera.Parameters内にある各フォーカス距離に関連するデータのキーは下記のとおりです。
focus-distances | カメラデバイスの現在の各フォーカス距離(近フォーカス距離・最適フォーカス距離・遠フォーカス距離)のキーです。 |
各フォーカス距離の取得
各フォーカス距離はvoid getFocusDistances(float[] output)で現在の値が取得できます。int FOCUS_DISTANCE_NEAR_INDEX | float配列の近フォーカス距離が格納されているインデックスです。 |
int FOCUS_DISTANCE_OPTIMAL_INDEX | float配列の最適フォーカス距離が格納されているインデックスです。 |
int FOCUS_DISTANCE_FAR_INDEX | float配列の遠フォーカス距離が格納されているインデックスです。 |
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); float[] distances = new float[3]; parameters.getFocusDistances(distances); Log.d(TAG, "near index = " + distances[Camera.Parameters.FOCUS_DISTANCE_NEAR_INDEX]); Log.d(TAG, "optimal index = " + distances[Camera.Parameters.FOCUS_DISTANCE_OPTIMAL_INDEX]); Log.d(TAG, "far index = " + distances[Camera.Parameters.FOCUS_DISTANCE_FAR_INDEX]); mCamera.setParameters(parameters); }
フォーカス距離の注意点
- 各フォーカス距離はCamera#autoFocus、Camera#cancelAutoFocus、Camera#startPreviewで更新される可能性があります。
- フォーカス距離はカメラを開いた状態だといつでも最新の値を取得することができます。
- 遠フォーカス距離 – 近フォーカス距離により被写界深度を計算することができます。
- 精度は色々な要因(カメラデバイス・オートフォーカスアルゴリズム・フォーカスエリア・シーン)に依存します。