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}")
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();
}
}
}
}
-
- 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");
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;
}