1 package org.opencv.samples.cameracalibration;
3 import org.opencv.core.Mat;
5 import android.app.Activity;
6 import android.content.Context;
7 import android.content.SharedPreferences;
8 import android.util.Log;
10 public abstract class CalibrationResult {
11 private static final String TAG = "OCVSample::CalibrationResult";
13 private static final int CAMERA_MATRIX_ROWS = 3;
14 private static final int CAMERA_MATRIX_COLS = 3;
15 private static final int DISTORTION_COEFFICIENTS_SIZE = 5;
17 public static void save(Activity activity, Mat cameraMatrix, Mat distortionCoefficients) {
18 SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
19 SharedPreferences.Editor editor = sharedPref.edit();
21 double[] cameraMatrixArray = new double[CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS];
22 cameraMatrix.get(0, 0, cameraMatrixArray);
23 for (int i = 0; i < CAMERA_MATRIX_ROWS; i++) {
24 for (int j = 0; j < CAMERA_MATRIX_COLS; j++) {
25 Integer id = i * CAMERA_MATRIX_ROWS + j;
26 editor.putFloat(id.toString(), (float)cameraMatrixArray[id]);
30 double[] distortionCoefficientsArray = new double[DISTORTION_COEFFICIENTS_SIZE];
31 distortionCoefficients.get(0, 0, distortionCoefficientsArray);
32 int shift = CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS;
33 for (Integer i = shift; i < DISTORTION_COEFFICIENTS_SIZE + shift; i++) {
34 editor.putFloat(i.toString(), (float)distortionCoefficientsArray[i-shift]);
38 Log.i(TAG, "Saved camera matrix: " + cameraMatrix.dump());
39 Log.i(TAG, "Saved distortion coefficients: " + distortionCoefficients.dump());
42 public static boolean tryLoad(Activity activity, Mat cameraMatrix, Mat distortionCoefficients) {
43 SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
44 if (sharedPref.getFloat("0", -1) == -1) {
45 Log.i(TAG, "No previous calibration results found");
49 double[] cameraMatrixArray = new double[CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS];
50 for (int i = 0; i < CAMERA_MATRIX_ROWS; i++) {
51 for (int j = 0; j < CAMERA_MATRIX_COLS; j++) {
52 Integer id = i * CAMERA_MATRIX_ROWS + j;
53 cameraMatrixArray[id] = sharedPref.getFloat(id.toString(), -1);
56 cameraMatrix.put(0, 0, cameraMatrixArray);
57 Log.i(TAG, "Loaded camera matrix: " + cameraMatrix.dump());
59 double[] distortionCoefficientsArray = new double[DISTORTION_COEFFICIENTS_SIZE];
60 int shift = CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS;
61 for (Integer i = shift; i < DISTORTION_COEFFICIENTS_SIZE + shift; i++) {
62 distortionCoefficientsArray[i - shift] = sharedPref.getFloat(i.toString(), -1);
64 distortionCoefficients.put(0, 0, distortionCoefficientsArray);
65 Log.i(TAG, "Loaded distortion coefficients: " + distortionCoefficients.dump());