Merge remote-tracking branch 'upstream/3.4' into merge-3.4
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Tue, 18 Dec 2018 19:07:43 +0000 (19:07 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Tue, 18 Dec 2018 19:07:43 +0000 (19:07 +0000)
13 files changed:
1  2 
CMakeLists.txt
cmake/OpenCVDetectCUDA.cmake
cmake/OpenCVFindLibsVideo.cmake
cmake/OpenCVGenSetupVars.cmake
doc/tutorials/imgproc/histograms/template_matching/template_matching.markdown
modules/core/src/ocl.cpp
modules/core/test/test_mat.cpp
modules/imgproc/src/deriv.cpp
modules/stitching/perf/perf_stich.cpp
modules/stitching/src/exposure_compensate.cpp
modules/videoio/CMakeLists.txt
modules/videoio/src/cap_dc1394_v2.cpp
modules/videoio/src/cap_msmf.cpp

diff --cc CMakeLists.txt
@@@ -574,23 -590,25 +577,23 @@@ else(
      ocv_update(OPENCV_JAR_INSTALL_PATH java)
      ocv_update(OPENCV_OTHER_INSTALL_PATH   etc)
      ocv_update(OPENCV_CONFIG_INSTALL_PATH  ".")
 +    ocv_update(OPENCV_INCLUDE_INSTALL_PATH "include")
 +    ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
    else()
 +    # Note: layout differs from OpenCV 3.4
      include(GNUInstallDirs)
 -    ocv_update(OPENCV_LIB_INSTALL_PATH     ${CMAKE_INSTALL_LIBDIR}${LIB_SUFFIX})
 -    ocv_update(OPENCV_3P_LIB_INSTALL_PATH  share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
 -    ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH    share/OpenCV/samples)
 -    ocv_update(OPENCV_JAR_INSTALL_PATH share/OpenCV/java)
 -    ocv_update(OPENCV_OTHER_INSTALL_PATH   share/OpenCV)
 -
 -    if(NOT DEFINED OPENCV_CONFIG_INSTALL_PATH)
 -      math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
 -      if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX)
 -        ocv_update(OPENCV_CONFIG_INSTALL_PATH ${CMAKE_INSTALL_LIBDIR}${LIB_SUFFIX}/cmake/opencv)
 -      else()
 -        ocv_update(OPENCV_CONFIG_INSTALL_PATH share/OpenCV)
 -      endif()
 -    endif()
 +    ocv_update(OPENCV_INCLUDE_INSTALL_PATH       "${CMAKE_INSTALL_INCLUDEDIR}/opencv4")
 +    ocv_update(OPENCV_LIB_INSTALL_PATH           "${CMAKE_INSTALL_LIBDIR}${LIB_SUFFIX}")
 +    ocv_update(OPENCV_CONFIG_INSTALL_PATH        "${OPENCV_LIB_INSTALL_PATH}/cmake/opencv4")
 +    ocv_update(OPENCV_3P_LIB_INSTALL_PATH        "${OPENCV_LIB_INSTALL_PATH}/opencv4/3rdparty")
 +    ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH   "${CMAKE_INSTALL_DATAROOTDIR}/opencv4/samples")
 +    ocv_update(OPENCV_DOC_INSTALL_PATH           "${CMAKE_INSTALL_DATAROOTDIR}/doc/opencv4")
 +    ocv_update(OPENCV_JAR_INSTALL_PATH           "${CMAKE_INSTALL_DATAROOTDIR}/java/opencv4")
 +    ocv_update(OPENCV_TEST_DATA_INSTALL_PATH     "${CMAKE_INSTALL_DATAROOTDIR}/opencv4/testdata")
 +    ocv_update(OPENCV_OTHER_INSTALL_PATH         "${CMAKE_INSTALL_DATAROOTDIR}/opencv4")
 +    ocv_update(OPENCV_LICENSES_INSTALL_PATH      "${CMAKE_INSTALL_DATAROOTDIR}/licenses/opencv4")
    endif()
-   ocv_update(OPENCV_PYTHON_INSTALL_PATH  "python")
 -  ocv_update(OPENCV_INCLUDE_INSTALL_PATH "include")
+   #ocv_update(OPENCV_PYTHON_INSTALL_PATH  "python")  # no default value, see https://github.com/opencv/opencv/issues/13202
  endif()
  
  ocv_update(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -41,14 -43,46 +43,46 @@@ PERF_TEST_P(stitch, a123, TEST_DETECTOR
  
      while(next())
      {
 -        Stitcher stitcher = Stitcher::createDefault();
 -        stitcher.setFeaturesFinder(featuresFinder);
 -        stitcher.setFeaturesMatcher(featuresMatcher);
 -        stitcher.setWarper(makePtr<SphericalWarper>());
 -        stitcher.setRegistrationResol(WORK_MEGAPIX);
 +        Ptr<Stitcher> stitcher = Stitcher::create();
 +        stitcher->setFeaturesFinder(featuresFinder);
 +        stitcher->setFeaturesMatcher(featuresMatcher);
 +        stitcher->setWarper(makePtr<SphericalWarper>());
 +        stitcher->setRegistrationResol(WORK_MEGAPIX);
  
          startTimer();
 -        stitcher.stitch(imgs, pano);
 +        stitcher->stitch(imgs, pano);
+         stopTimer();
+     }
+     EXPECT_NEAR(pano.size().width, 1182, 50);
+     EXPECT_NEAR(pano.size().height, 682, 30);
+     SANITY_CHECK_NOTHING();
+ }
+ PERF_TEST_P(stitchExposureCompensation, a123, TEST_EXP_COMP_BS)
+ {
+     Mat pano;
+     vector<Mat> imgs;
+     imgs.push_back( imread( getDataPath("stitching/a1.png") ) );
+     imgs.push_back( imread( getDataPath("stitching/a2.png") ) );
+     imgs.push_back( imread( getDataPath("stitching/a3.png") ) );
+     int bs = GetParam();
+     declare.time(30 * 10).iterations(10);
+     while(next())
+     {
+         Ptr<Stitcher> stitcher = Stitcher::create();
+         stitcher->setWarper(makePtr<SphericalWarper>());
+         stitcher->setRegistrationResol(WORK_MEGAPIX);
+         stitcher->setExposureCompensator(
+             makePtr<detail::BlocksGainCompensator>(bs, bs));
+         startTimer();
+         stitcher->stitch(imgs, pano);
          stopTimer();
      }
  
@@@ -126,26 -137,64 +143,66 @@@ void GainCompensator::feed(const std::v
              }
          }
      }
 -
 -    double alpha = 0.01;
 -    double beta = 100;
 -    int num_eq = num_images - countNonZero(skip);
 -
 -    Mat_<double> A(num_eq, num_eq); A.setTo(0);
 -    Mat_<double> b(num_eq, 1); b.setTo(0);
 -    for (int i = 0, ki = 0; i < num_images; ++i)
 +    if (getUpdateGain() || gains_.rows != num_images)
      {
 -        if (skip(i, 0))
 -            continue;
 +        double alpha = 0.01;
 +        double beta = 100;
++        int num_eq = num_images - countNonZero(skip);
  
-         Mat_<double> A(num_images, num_images); A.setTo(0);
-         Mat_<double> b(num_images, 1); b.setTo(0);
-         for (int i = 0; i < num_images; ++i)
 -        for (int j = 0, kj = 0; j < num_images; ++j)
++        Mat_<double> A(num_eq, num_eq); A.setTo(0);
++        Mat_<double> b(num_eq, 1); b.setTo(0);
++        for (int i = 0, ki = 0; i < num_images; ++i)
          {
-             for (int j = 0; j < num_images; ++j)
 -            if (skip(j, 0))
++            if (skip(i, 0))
+                 continue;
 -            b(ki, 0) += beta * N(i, j);
 -            A(ki, ki) += beta * N(i, j);
 -            if (j != i)
++            for (int j = 0, kj = 0; j < num_images; ++j)
              {
-                 b(i, 0) += beta * N(i, j);
-                 A(i, i) += beta * N(i, j);
-                 if (j == i) continue;
-                 A(i, i) += 2 * alpha * I(i, j) * I(i, j) * N(i, j);
-                 A(i, j) -= 2 * alpha * I(i, j) * I(j, i) * N(i, j);
 -                A(ki, ki) += 2 * alpha * I(i, j) * I(i, j) * N(i, j);
 -                A(ki, kj) -= 2 * alpha * I(i, j) * I(j, i) * N(i, j);
++                if (skip(j, 0))
++                    continue;
++
++                b(ki, 0) += beta * N(i, j);
++                A(ki, ki) += beta * N(i, j);
++                if (j != i)
++                {
++                    A(ki, ki) += 2 * alpha * I(i, j) * I(i, j) * N(i, j);
++                    A(ki, kj) -= 2 * alpha * I(i, j) * I(j, i) * N(i, j);
++                }
++                ++kj;
              }
 -            ++kj;
++            ++ki;
          }
 -        ++ki;
 -    }
  
-         solve(A, b, gains_);
 -    Mat_<double> l_gains;
++        Mat_<double> l_gains;
+ #ifdef HAVE_EIGEN
 -    Eigen::MatrixXf eigen_A, eigen_b, eigen_x;
 -    cv2eigen(A, eigen_A);
 -    cv2eigen(b, eigen_b);
++        Eigen::MatrixXf eigen_A, eigen_b, eigen_x;
++        cv2eigen(A, eigen_A);
++        cv2eigen(b, eigen_b);
 -    Eigen::LLT<Eigen::MatrixXf> solver(eigen_A);
++        Eigen::LLT<Eigen::MatrixXf> solver(eigen_A);
+ #if ENABLE_LOG
 -    if (solver.info() != Eigen::ComputationInfo::Success)
 -        LOGLN("Failed to solve exposure compensation system");
++        if (solver.info() != Eigen::ComputationInfo::Success)
++            LOGLN("Failed to solve exposure compensation system");
+ #endif
 -    eigen_x = solver.solve(eigen_b);
++        eigen_x = solver.solve(eigen_b);
 -    Mat_<float> l_gains_float;
 -    eigen2cv(eigen_x, l_gains_float);
 -    l_gains_float.convertTo(l_gains, CV_64FC1);
++        Mat_<float> l_gains_float;
++        eigen2cv(eigen_x, l_gains_float);
++        l_gains_float.convertTo(l_gains, CV_64FC1);
+ #else
 -    solve(A, b, l_gains);
++        solve(A, b, l_gains);
+ #endif
 -    CV_CheckTypeEQ(l_gains.type(), CV_64FC1, "");
++        CV_CheckTypeEQ(l_gains.type(), CV_64FC1, "");
 -    gains_.create(num_images, 1);
 -    for (int i = 0, j = 0; i < num_images; ++i)
 -    {
 -        if (skip(i, 0))
 -            gains_.at<double>(i, 0) = 1;
 -        else
 -            gains_.at<double>(i, 0) = l_gains(j++, 0);
++        gains_.create(num_images, 1);
++        for (int i = 0, j = 0; i < num_images; ++i)
++        {
++            if (skip(i, 0))
++                gains_.at<double>(i, 0) = 1;
++            else
++                gains_.at<double>(i, 0) = l_gains(j++, 0);
++        }
      }
  
      LOGLN("Exposure compensation, time: " << ((getTickCount() - t) / getTickFrequency()) << " sec");
Simple merge
@@@ -436,8 -455,18 +440,8 @@@ bool CvCaptureCAM_DC1394_v2_CPP::startC
      code = dc1394_capture_setup(dcCam, nDMABufs, DC1394_CAPTURE_FLAGS_DEFAULT);
      if (code >= 0)
      {
-         FD_SET(dc1394_capture_get_fileno(dcCam), &dc1394.camFds);
+         FD_SET(dc1394_capture_get_fileno(dcCam), &getDC1394().camFds);
          dc1394_video_set_transmission(dcCam, DC1394_ON);
 -        if (cameraId == VIDERE)
 -        {
 -            enum { PROC_MODE_OFF, PROC_MODE_NONE, PROC_MODE_TEST, PROC_MODE_RECTIFIED, PROC_MODE_DISPARITY, PROC_MODE_DISPARITY_RAW };
 -            int procMode = PROC_MODE_RECTIFIED;
 -            usleep(100000);
 -            uint32_t qval1 = 0x08000000 | (0x90 << 16) | ((procMode & 0x7) << 16);
 -            uint32_t qval2 = 0x08000000 | (0x9C << 16);
 -            dc1394_set_control_register(dcCam, 0xFF000, qval1);
 -            dc1394_set_control_register(dcCam, 0xFF000, qval2);
 -        }
          started = true;
      }
  
Simple merge