~paparazzi-uav/paparazzi/v5.0-manual

« back to all changes in this revision

Viewing changes to sw/ext/opencv_bebop/opencv/samples/android/camera-calibration/src/org/opencv/samples/cameracalibration/OnCameraFrameRender.java

  • Committer: Paparazzi buildbot
  • Date: 2016-05-18 15:00:29 UTC
  • Revision ID: felix.ruess+docbot@gmail.com-20160518150029-e8lgzi5kvb4p7un9
Manual import commit 4b8bbb730080dac23cf816b98908dacfabe2a8ec from v5.0 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.opencv.samples.cameracalibration;
 
2
 
 
3
import java.util.ArrayList;
 
4
import java.util.List;
 
5
 
 
6
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
 
7
import org.opencv.core.Core;
 
8
import org.opencv.core.Mat;
 
9
import org.opencv.core.MatOfPoint;
 
10
import org.opencv.core.Point;
 
11
import org.opencv.core.Range;
 
12
import org.opencv.core.Scalar;
 
13
import org.opencv.imgproc.Imgproc;
 
14
 
 
15
import android.content.res.Resources;
 
16
 
 
17
abstract class FrameRender {
 
18
    protected CameraCalibrator mCalibrator;
 
19
 
 
20
    public abstract Mat render(CvCameraViewFrame inputFrame);
 
21
}
 
22
 
 
23
class PreviewFrameRender extends FrameRender {
 
24
    @Override
 
25
    public Mat render(CvCameraViewFrame inputFrame) {
 
26
        return inputFrame.rgba();
 
27
    }
 
28
}
 
29
 
 
30
class CalibrationFrameRender extends FrameRender {
 
31
    public CalibrationFrameRender(CameraCalibrator calibrator) {
 
32
        mCalibrator = calibrator;
 
33
    }
 
34
 
 
35
    @Override
 
36
    public Mat render(CvCameraViewFrame inputFrame) {
 
37
        Mat rgbaFrame = inputFrame.rgba();
 
38
        Mat grayFrame = inputFrame.gray();
 
39
        mCalibrator.processFrame(grayFrame, rgbaFrame);
 
40
 
 
41
        return rgbaFrame;
 
42
    }
 
43
}
 
44
 
 
45
class UndistortionFrameRender extends FrameRender {
 
46
    public UndistortionFrameRender(CameraCalibrator calibrator) {
 
47
        mCalibrator = calibrator;
 
48
    }
 
49
 
 
50
    @Override
 
51
    public Mat render(CvCameraViewFrame inputFrame) {
 
52
        Mat renderedFrame = new Mat(inputFrame.rgba().size(), inputFrame.rgba().type());
 
53
        Imgproc.undistort(inputFrame.rgba(), renderedFrame,
 
54
                mCalibrator.getCameraMatrix(), mCalibrator.getDistortionCoefficients());
 
55
 
 
56
        return renderedFrame;
 
57
    }
 
58
}
 
59
 
 
60
class ComparisonFrameRender extends FrameRender {
 
61
    private int mWidth;
 
62
    private int mHeight;
 
63
    private Resources mResources;
 
64
    public ComparisonFrameRender(CameraCalibrator calibrator, int width, int height, Resources resources) {
 
65
        mCalibrator = calibrator;
 
66
        mWidth = width;
 
67
        mHeight = height;
 
68
        mResources = resources;
 
69
    }
 
70
 
 
71
    @Override
 
72
    public Mat render(CvCameraViewFrame inputFrame) {
 
73
        Mat undistortedFrame = new Mat(inputFrame.rgba().size(), inputFrame.rgba().type());
 
74
        Imgproc.undistort(inputFrame.rgba(), undistortedFrame,
 
75
                mCalibrator.getCameraMatrix(), mCalibrator.getDistortionCoefficients());
 
76
 
 
77
        Mat comparisonFrame = inputFrame.rgba();
 
78
        undistortedFrame.colRange(new Range(0, mWidth / 2)).copyTo(comparisonFrame.colRange(new Range(mWidth / 2, mWidth)));
 
79
        List<MatOfPoint> border = new ArrayList<MatOfPoint>();
 
80
        final int shift = (int)(mWidth * 0.005);
 
81
        border.add(new MatOfPoint(new Point(mWidth / 2 - shift, 0), new Point(mWidth / 2 + shift, 0),
 
82
                new Point(mWidth / 2 + shift, mHeight), new Point(mWidth / 2 - shift, mHeight)));
 
83
        Imgproc.fillPoly(comparisonFrame, border, new Scalar(255, 255, 255));
 
84
 
 
85
        Imgproc.putText(comparisonFrame, mResources.getString(R.string.original), new Point(mWidth * 0.1, mHeight * 0.1),
 
86
                Core.FONT_HERSHEY_SIMPLEX, 1.0, new Scalar(255, 255, 0));
 
87
        Imgproc.putText(comparisonFrame, mResources.getString(R.string.undistorted), new Point(mWidth * 0.6, mHeight * 0.1),
 
88
                Core.FONT_HERSHEY_SIMPLEX, 1.0, new Scalar(255, 255, 0));
 
89
 
 
90
        return comparisonFrame;
 
91
    }
 
92
}
 
93
 
 
94
class OnCameraFrameRender {
 
95
    private FrameRender mFrameRender;
 
96
    public OnCameraFrameRender(FrameRender frameRender) {
 
97
        mFrameRender = frameRender;
 
98
    }
 
99
    public Mat render(CvCameraViewFrame inputFrame) {
 
100
        return mFrameRender.render(inputFrame);
 
101
    }
 
102
}