Merge remote-tracking branch 'upstream/3.4' into merge-3.4
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Tue, 12 May 2020 19:24:28 +0000 (19:24 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Tue, 12 May 2020 19:24:28 +0000 (19:24 +0000)
15 files changed:
1  2 
doc/tutorials/calib3d/table_of_content_calib3d.markdown
doc/tutorials/core/table_of_content_core.markdown
doc/tutorials/gpu/table_of_content_gpu.markdown
modules/calib3d/misc/java/test/Calib3dTest.java
modules/dnn/src/onnx/onnx_graph_simplifier.cpp
modules/dnn/src/onnx/onnx_importer.cpp
modules/dnn/src/tensorflow/tf_importer.cpp
modules/dnn/test/test_onnx_importer.cpp
modules/dnn/test/test_tf_importer.cpp
modules/imgproc/include/opencv2/imgproc.hpp
modules/videoio/src/cap_dshow.cpp
modules/videoio/src/cap_mfx_common.cpp
modules/videoio/src/cap_mfx_common.hpp
modules/videoio/src/cap_mfx_reader.cpp
modules/videoio/src/cap_mfx_writer.cpp

@@@ -21,7 -25,9 +25,9 @@@ Although we get most of our images in 
  
  -   @subpage tutorial_camera_calibration
  
 -    *Compatibility:* \> OpenCV 2.0
+     *Languages:* C++
 +    *Compatibility:* \> OpenCV 4.0
  
      *Author:* Bernát Gábor
  
@@@ -82,8 -88,23 +88,10 @@@ understanding how to manipulate the ima
      You will see how to use the @ref cv::FileStorage data structure of OpenCV to write and read
      data to XML or YAML file format.
  
 --   @subpage tutorial_interoperability_with_OpenCV_1
 -
 -    *Languages:* C++
 -
 -    *Compatibility:* \> OpenCV 2.0
 -
 -    *Author:* Bernát Gábor
 -
 -    Did you used OpenCV before its 2.0 version? Do you wanna know what happened with your library
 -    with 2.0? Don't you know how to convert your old OpenCV programs to the new C++ interface?
 -    Look here to shed light on all this questions.
 -
 -
  -   @subpage tutorial_how_to_use_OpenCV_parallel_for_
  
+     *Languages:* C++
      *Compatibility:* \>= OpenCV 2.4.3
  
      You will see how to use the OpenCV parallel_for_ to easily parallelize your code.
@@@ -693,129 -683,30 +693,157 @@@ public class Calib3dTest extends OpenCV
          assertMatEqual(truth_tvec, tvecs.get(0), 1000 * EPS);
      }
  
 +    public void testGetDefaultNewCameraMatrixMat() {
 +        Mat mtx = Calib3d.getDefaultNewCameraMatrix(gray0);
 +
 +        assertFalse(mtx.empty());
 +        assertEquals(0, Core.countNonZero(mtx));
 +    }
 +
 +    public void testGetDefaultNewCameraMatrixMatSizeBoolean() {
 +        Mat mtx = Calib3d.getDefaultNewCameraMatrix(gray0, size, true);
 +
 +        assertFalse(mtx.empty());
 +        assertFalse(0 == Core.countNonZero(mtx));
 +        // TODO_: write better test
 +    }
 +
 +    public void testInitUndistortRectifyMap() {
 +        fail("Not yet implemented");
 +        Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F);
 +        cameraMatrix.put(0, 0, 1, 0, 1);
 +        cameraMatrix.put(1, 0, 0, 1, 1);
 +        cameraMatrix.put(2, 0, 0, 0, 1);
 +
 +        Mat R = new Mat(3, 3, CvType.CV_32F, new Scalar(2));
 +        Mat newCameraMatrix = new Mat(3, 3, CvType.CV_32F, new Scalar(3));
 +
 +        Mat distCoeffs = new Mat();
 +        Mat map1 = new Mat();
 +        Mat map2 = new Mat();
 +
 +        // TODO: complete this test
 +        Calib3d.initUndistortRectifyMap(cameraMatrix, distCoeffs, R, newCameraMatrix, size, CvType.CV_32F, map1, map2);
 +    }
 +
 +    public void testInitWideAngleProjMapMatMatSizeIntIntMatMat() {
 +        fail("Not yet implemented");
 +        Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F);
 +        Mat distCoeffs = new Mat(1, 4, CvType.CV_32F);
 +        // Size imageSize = new Size(2, 2);
 +
 +        cameraMatrix.put(0, 0, 1, 0, 1);
 +        cameraMatrix.put(1, 0, 0, 1, 2);
 +        cameraMatrix.put(2, 0, 0, 0, 1);
 +
 +        distCoeffs.put(0, 0, 1, 3, 2, 4);
 +        truth = new Mat(3, 3, CvType.CV_32F);
 +        truth.put(0, 0, 0, 0, 0);
 +        truth.put(1, 0, 0, 0, 0);
 +        truth.put(2, 0, 0, 3, 0);
 +        // TODO: No documentation for this function
 +        // Calib3d.initWideAngleProjMap(cameraMatrix, distCoeffs, imageSize,
 +        // 5, m1type, truthput1, truthput2);
 +    }
 +
 +    public void testInitWideAngleProjMapMatMatSizeIntIntMatMatInt() {
 +        fail("Not yet implemented");
 +    }
 +
 +    public void testInitWideAngleProjMapMatMatSizeIntIntMatMatIntDouble() {
 +        fail("Not yet implemented");
 +    }
 +
 +    public void testUndistortMatMatMatMat() {
 +        Mat src = new Mat(3, 3, CvType.CV_32F, new Scalar(3));
 +        Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F) {
 +            {
 +                put(0, 0, 1, 0, 1);
 +                put(1, 0, 0, 1, 2);
 +                put(2, 0, 0, 0, 1);
 +            }
 +        };
 +        Mat distCoeffs = new Mat(1, 4, CvType.CV_32F) {
 +            {
 +                put(0, 0, 1, 3, 2, 4);
 +            }
 +        };
 +
 +        Calib3d.undistort(src, dst, cameraMatrix, distCoeffs);
 +
 +        truth = new Mat(3, 3, CvType.CV_32F) {
 +            {
 +                put(0, 0, 0, 0, 0);
 +                put(1, 0, 0, 0, 0);
 +                put(2, 0, 0, 3, 0);
 +            }
 +        };
 +        assertMatEqual(truth, dst, EPS);
 +    }
 +
 +    public void testUndistortMatMatMatMatMat() {
 +        Mat src = new Mat(3, 3, CvType.CV_32F, new Scalar(3));
 +        Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F) {
 +            {
 +                put(0, 0, 1, 0, 1);
 +                put(1, 0, 0, 1, 2);
 +                put(2, 0, 0, 0, 1);
 +            }
 +        };
 +        Mat distCoeffs = new Mat(1, 4, CvType.CV_32F) {
 +            {
 +                put(0, 0, 2, 1, 4, 5);
 +            }
 +        };
 +        Mat newCameraMatrix = new Mat(3, 3, CvType.CV_32F, new Scalar(1));
 +
 +        Calib3d.undistort(src, dst, cameraMatrix, distCoeffs, newCameraMatrix);
 +
 +        truth = new Mat(3, 3, CvType.CV_32F, new Scalar(3));
 +        assertMatEqual(truth, dst, EPS);
 +    }
 +
 +    //undistortPoints(List<Point> src, List<Point> dst, Mat cameraMatrix, Mat distCoeffs)
 +    public void testUndistortPointsListOfPointListOfPointMatMat() {
 +        MatOfPoint2f src = new MatOfPoint2f(new Point(1, 2), new Point(3, 4), new Point(-1, -1));
 +        MatOfPoint2f dst = new MatOfPoint2f();
 +        Mat cameraMatrix = Mat.eye(3, 3, CvType.CV_64FC1);
 +        Mat distCoeffs = new Mat(8, 1, CvType.CV_64FC1, new Scalar(0));
 +
 +        Calib3d.undistortPoints(src, dst, cameraMatrix, distCoeffs);
 +
 +        assertEquals(src.size(), dst.size());
 +        for(int i=0; i<src.toList().size(); i++) {
 +            //Log.d("UndistortPoints", "s="+src.get(i)+", d="+dst.get(i));
 +            assertTrue(src.toList().get(i).equals(dst.toList().get(i)));
 +        }
 +    }
++
+     public void testEstimateNewCameraMatrixForUndistortRectify() {
+         Mat K = new Mat().eye(3, 3, CvType.CV_64FC1);
+         Mat K_new = new Mat().eye(3, 3, CvType.CV_64FC1);
+         Mat K_new_truth = new Mat().eye(3, 3, CvType.CV_64FC1);
+         Mat D = new Mat().zeros(4, 1, CvType.CV_64FC1);
+         K.put(0,0,600.4447738238429);
+         K.put(1,1,578.9929805505851);
+         K.put(0,2,992.0642578801213);
+         K.put(1,2,549.2682624212172);
+         D.put(0,0,-0.05090103223466704);
+         D.put(1,0,0.030944413642173308);
+         D.put(2,0,-0.021509225493198905);
+         D.put(3,0,0.0043378096628297145);
+         K_new_truth.put(0,0, 387.4809086880343);
+         K_new_truth.put(0,2, 1036.669802754649);
+         K_new_truth.put(1,1, 373.6375700303157);
+         K_new_truth.put(1,2, 538.8373261247601);
+         Calib3d.fisheye_estimateNewCameraMatrixForUndistortRectify(K,D,new Size(1920,1080),
+                     new Mat().eye(3, 3, CvType.CV_64F), K_new, 0.0, new Size(1920,1080));
+         assertMatEqual(K_new, K_new_truth, EPS);
+     }
++
  }
Simple merge
@@@ -109,9 -108,10 +109,10 @@@ Thanks to
  #include <vector>
  
  //Include Directshow stuff here so we don't worry about needing all the h files.
 -#include "DShow.h"
+ #define NO_DSHOW_STRSAFE
 +#include "dshow.h"
  #include "strmif.h"
 -#include "Aviriff.h"
 +#include "aviriff.h"
  #include "dvdmedia.h"
  #include "bdaiface.h"