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_INCLUDE_INSTALL_PATH "include")
+ ocv_update(OPENCV_PYTHON_INSTALL_PATH "python")
endif()
ocv_update(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
`TAGFILES`. Change it as follows:
@code
- TAGFILES = ./docs/doxygen-tags/opencv.tag=http://docs.opencv.org/3.4.3
-TAGFILES = ./docs/doxygen-tags/opencv.tag=http://docs.opencv.org/3.4.4
++TAGFILES = ./docs/doxygen-tags/opencv.tag=http://docs.opencv.org/4.0.0
@endcode
If you had other definitions already, you can append the line using a `\`:
@code
TAGFILES = ./docs/doxygen-tags/libstdc++.tag=https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen \
- ./docs/doxygen-tags/opencv.tag=http://docs.opencv.org/3.4.3
- ./docs/doxygen-tags/opencv.tag=http://docs.opencv.org/3.4.4
++ ./docs/doxygen-tags/opencv.tag=http://docs.opencv.org/4.0.0
@endcode
Doxygen can now use the information from the tag file to link to the OpenCV
flag value is assumed by default if neither of the two possible values of the property is set.
For more information please refer to the example of usage
- [intelperc_capture.cpp](https://github.com/opencv/opencv/tree/master/samples/cpp/intelperc_capture.cpp)
-[videocapture_intelperc.cpp](https://github.com/opencv/opencv/tree/3.4/samples/cpp/videocapture_intelperc.cpp)
++[videocapture_intelperc.cpp](https://github.com/opencv/opencv/tree/master/samples/cpp/videocapture_intelperc.cpp)
in opencv/samples/cpp folder.
- CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_REGISTRATION
For more information please refer to the example of usage
- [openni_capture.cpp](https://github.com/opencv/opencv/tree/master/samples/cpp/openni_capture.cpp) in
-[videocapture_openni.cpp](https://github.com/opencv/opencv/tree/3.4/samples/cpp/videocapture_openni.cpp) in
++[videocapture_openni.cpp](https://github.com/opencv/opencv/tree/master/samples/cpp/videocapture_openni.cpp) in
opencv/samples/cpp folder.
virtual bool supportBackend(int backendId) CV_OVERRIDE
{
return backendId == DNN_BACKEND_OPENCV ||
- backendId == DNN_BACKEND_HALIDE && haveHalide() && axis == 1 && !padding || // By channels
- backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() && !padding ||
- backendId == DNN_BACKEND_VKCOM && haveVulkan() && !padding;
+ (backendId == DNN_BACKEND_HALIDE && haveHalide() && axis == 1 && !padding) || // By channels
- (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() && !padding);
++ (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() && !padding) ||
++ (backendId == DNN_BACKEND_VKCOM && haveVulkan() && !padding);
}
class ChannelConcatInvoker : public ParallelLoopBody
if (backendId == DNN_BACKEND_INFERENCE_ENGINE)
return preferableTarget != DNN_TARGET_MYRIAD || dilation.width == dilation.height;
else
- return backendId == DNN_BACKEND_OPENCV || backendId == DNN_BACKEND_HALIDE;
+ return backendId == DNN_BACKEND_OPENCV ||
+ backendId == DNN_BACKEND_HALIDE ||
- backendId == DNN_BACKEND_VKCOM && haveVulkan();
++ (backendId == DNN_BACKEND_VKCOM && haveVulkan());
}
bool getMemoryShapes(const std::vector<MatShape> &inputs,
{
return backendId == DNN_BACKEND_OPENCV ||
backendId == DNN_BACKEND_HALIDE ||
- backendId == DNN_BACKEND_INFERENCE_ENGINE && (preferableTarget != DNN_TARGET_MYRIAD || type == CHANNEL_NRM) ||
- backendId == DNN_BACKEND_VKCOM && haveVulkan() && (size % 2 == 1) && (type == CHANNEL_NRM);
- (backendId == DNN_BACKEND_INFERENCE_ENGINE && (preferableTarget != DNN_TARGET_MYRIAD || type == CHANNEL_NRM));
++ (backendId == DNN_BACKEND_INFERENCE_ENGINE && (preferableTarget != DNN_TARGET_MYRIAD || type == CHANNEL_NRM)) ||
++ (backendId == DNN_BACKEND_VKCOM && haveVulkan() && (size % 2 == 1) && (type == CHANNEL_NRM));
}
#ifdef HAVE_OPENCL
virtual bool supportBackend(int backendId) CV_OVERRIDE
{
return backendId == DNN_BACKEND_OPENCV ||
- backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() ||
- backendId == DNN_BACKEND_VKCOM && haveVulkan();
- (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine());
++ (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine()) ||
++ (backendId == DNN_BACKEND_VKCOM && haveVulkan());
}
bool getMemoryShapes(const std::vector<MatShape> &inputs,
}
else
return backendId == DNN_BACKEND_OPENCV ||
- backendId == DNN_BACKEND_HALIDE && haveHalide() &&
- (type == MAX || type == AVE && !pad_t && !pad_l && !pad_b && !pad_r) ||
- backendId == DNN_BACKEND_VKCOM && haveVulkan() &&
- (type == MAX || type == AVE);
+ (backendId == DNN_BACKEND_HALIDE && haveHalide() &&
- (type == MAX || (type == AVE && !pad_t && !pad_l && !pad_b && !pad_r)));
++ (type == MAX || (type == AVE && !pad_t && !pad_l && !pad_b && !pad_r))) ||
++ (backendId == DNN_BACKEND_VKCOM && haveVulkan() &&
++ (type == MAX || type == AVE));
}
#ifdef HAVE_OPENCL
virtual bool supportBackend(int backendId) CV_OVERRIDE
{
return backendId == DNN_BACKEND_OPENCV ||
- backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() ||
- backendId == DNN_BACKEND_VKCOM && haveVulkan();
- (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine());
++ (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine()) ||
++ (backendId == DNN_BACKEND_VKCOM && haveVulkan());
}
bool getMemoryShapes(const std::vector<MatShape> &inputs,
virtual bool supportBackend(int backendId) CV_OVERRIDE
{
return backendId == DNN_BACKEND_OPENCV ||
- backendId == DNN_BACKEND_HALIDE && haveHalide() && axisRaw == 1 ||
- backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() && !logSoftMax ||
- backendId == DNN_BACKEND_VKCOM && haveVulkan();
+ (backendId == DNN_BACKEND_HALIDE && haveHalide() && axisRaw == 1) ||
- (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() && !logSoftMax);
++ (backendId == DNN_BACKEND_INFERENCE_ENGINE && haveInfEngine() && !logSoftMax) ||
++ (backendId == DNN_BACKEND_VKCOM && haveVulkan());
}
#ifdef HAVE_OPENCL
targetDevice = device;
}
-InferenceEngine::TargetDevice InfEngineBackendNet::getTargetDevice() noexcept
+InferenceEngine::TargetDevice InfEngineBackendNet::getTargetDevice() CV_NOEXCEPT
{
- return targetDevice;
+ return const_cast<const InfEngineBackendNet*>(this)->getTargetDevice();
}
-InferenceEngine::TargetDevice InfEngineBackendNet::getTargetDevice() const noexcept
+InferenceEngine::TargetDevice InfEngineBackendNet::getTargetDevice() const CV_NOEXCEPT
{
return targetDevice;
}
case DNN_BACKEND_HALIDE: *os << "HALIDE"; return;
case DNN_BACKEND_INFERENCE_ENGINE: *os << "DLIE"; return;
case DNN_BACKEND_OPENCV: *os << "OCV"; return;
+ case DNN_BACKEND_VKCOM: *os << "VKCOM"; return;
} // don't use "default:" to emit compiler warnings
- *os << "DNN_BACKEND_UNKNOWN(" << v << ")";
+ *os << "DNN_BACKEND_UNKNOWN(" << (int)v << ")";
}
static inline void PrintTo(const cv::dnn::Target& v, std::ostream* os)
case DNN_TARGET_OPENCL: *os << "OCL"; return;
case DNN_TARGET_OPENCL_FP16: *os << "OCL_FP16"; return;
case DNN_TARGET_MYRIAD: *os << "MYRIAD"; return;
+ case DNN_TARGET_VULKAN: *os << "VULKAN"; return;
} // don't use "default:" to emit compiler warnings
- *os << "DNN_TARGET_UNKNOWN(" << v << ")";
+ *os << "DNN_TARGET_UNKNOWN(" << (int)v << ")";
}
using opencv_test::tuple;
using namespace cv::dnn;
- static testing::internal::ParamGenerator<tuple<Backend, Target> > dnnBackendsAndTargets(
+ static inline
+ testing::internal::ParamGenerator<tuple<Backend, Target> > dnnBackendsAndTargets(
bool withInferenceEngine = true,
bool withHalide = false,
- bool withCpuOCV = true
+ bool withCpuOCV = true,
+ bool withVkCom = true
)
{
std::vector<tuple<Backend, Target> > targets;
ASSERT_NE( strstr(str.c_str(), "4.5"), (char*)0 );
}
+TEST( Features2d_FlannBasedMatcher, read_write )
+{
+ static const char* ymlfile = "%YAML:1.0\n---\n"
+ "format: 3\n"
+ "indexParams:\n"
+ " -\n"
+ " name: algorithm\n"
+ " type: 9\n" // FLANN_INDEX_TYPE_ALGORITHM
+ " value: 6\n"// this line is changed!
+ " -\n"
+ " name: trees\n"
+ " type: 4\n"
+ " value: 4\n"
+ "searchParams:\n"
+ " -\n"
+ " name: checks\n"
+ " type: 4\n"
+ " value: 32\n"
+ " -\n"
+ " name: eps\n"
+ " type: 5\n"
+ " value: 4.\n"// this line is changed!
+ " -\n"
+ " name: sorted\n"
+ " type: 8\n" // FLANN_INDEX_TYPE_BOOL
+ " value: 1\n";
+
+ Ptr<DescriptorMatcher> matcher = FlannBasedMatcher::create();
+ FileStorage fs_in(ymlfile, FileStorage::READ + FileStorage::MEMORY);
+ matcher->read(fs_in.root());
+ FileStorage fs_out(".yml", FileStorage::WRITE + FileStorage::MEMORY);
+ matcher->write(fs_out);
+ std::string out = fs_out.releaseAndGetString();
+
+ EXPECT_EQ(ymlfile, out);
+}
+
+
+ TEST(Features2d_DMatch, issue_11855)
+ {
+ Mat sources = (Mat_<uchar>(2, 3) << 1, 1, 0,
+ 1, 1, 1);
+ Mat targets = (Mat_<uchar>(2, 3) << 1, 1, 1,
+ 0, 0, 0);
+
+ Ptr<BFMatcher> bf = BFMatcher::create(NORM_HAMMING, true);
+ vector<vector<DMatch> > match;
+ bf->knnMatch(sources, targets, match, 1, noArray(), true);
+
+ ASSERT_EQ((size_t)1, match.size());
+ ASSERT_EQ((size_t)1, match[0].size());
+ EXPECT_EQ(1, match[0][0].queryIdx);
+ EXPECT_EQ(0, match[0][0].trainIdx);
+ EXPECT_EQ(0.0f, match[0][0].distance);
+ }
+
}} // namespace
ocv_list_filterout(opencv_hdrs "modules/.*_inl\\\\.h*")
ocv_list_filterout(opencv_hdrs "modules/.*\\\\.details\\\\.h*")
ocv_list_filterout(opencv_hdrs "modules/.*\\\\.private\\\\.h*")
+ ocv_list_filterout(opencv_hdrs "modules/.*/private\\\\.h*")
ocv_list_filterout(opencv_hdrs "modules/.*/detection_based_tracker\\\\.hpp") # Conditional compilation
+if(NOT HAVE_CUDA)
+ ocv_list_filterout(opencv_hdrs "modules/cuda.*")
+ ocv_list_filterout(opencv_hdrs "modules/cudev")
+endif()
set(cv2_generated_files
"${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_include.h"
--- /dev/null
- package_version = os.environ.get('OPENCV_VERSION', '3.4.4') # TODO
+ import os
+ import sys
+ import platform
+ import setuptools
+
+ SCRIPT_DIR=os.path.dirname(os.path.abspath(__file__))
+
+ def main():
+ os.chdir(SCRIPT_DIR)
+
+ package_name = 'opencv'
++ package_version = os.environ.get('OPENCV_VERSION', '4.0.0') # TODO
+
+ long_description = 'Open Source Computer Vision Library Python bindings' # TODO
+
+ setuptools.setup(
+ name=package_name,
+ version=package_version,
+ url='https://github.com/opencv/opencv',
+ license='BSD',
+ description='OpenCV python bindings',
+ long_description=long_description,
+ long_description_content_type="text/markdown",
+ packages=setuptools.find_packages(),
+ maintainer="OpenCV Team",
+ install_requires="numpy",
+ classifiers=[
+ 'Development Status :: 5 - Production/Stable',
+ 'Environment :: Console',
+ 'Intended Audience :: Developers',
+ 'Intended Audience :: Education',
+ 'Intended Audience :: Information Technology',
+ 'Intended Audience :: Science/Research',
+ 'License :: BSD License',
+ 'Operating System :: MacOS',
+ 'Operating System :: Microsoft :: Windows',
+ 'Operating System :: POSIX',
+ 'Operating System :: Unix',
+ 'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3',
+ 'Programming Language :: Python :: 3.4',
+ 'Programming Language :: Python :: 3.5',
+ 'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7',
+ 'Programming Language :: C++',
+ 'Programming Language :: Python :: Implementation :: CPython',
+ 'Topic :: Scientific/Engineering',
+ 'Topic :: Scientific/Engineering :: Image Recognition',
+ 'Topic :: Software Development',
+ 'Topic :: Software Development :: Libraries',
+ ],
+ )
+
+ if __name__ == '__main__':
+ main()
<parent>
<groupId>org.opencv</groupId>
<artifactId>opencv-parent</artifactId>
- <version>3.4.3</version>
- <version>3.4.4</version>
++ <version>4.0.0</version>
</parent>
<groupId>org.opencv</groupId>
<artifactId>opencv-it</artifactId>
<parent>
<groupId>org.opencv</groupId>
<artifactId>opencv-parent</artifactId>
- <version>3.4.3</version>
- <version>3.4.4</version>
++ <version>4.0.0</version>
</parent>
<groupId>org.opencv</groupId>
<artifactId>opencv</artifactId>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opencv</groupId>
<artifactId>opencv-parent</artifactId>
- <version>3.4.3</version>
- <version>3.4.4</version>
++ <version>4.0.0</version>
<packaging>pom</packaging>
<name>OpenCV Parent POM</name>
<licenses>
--- /dev/null
-IF NOT EXIST "%SCRIPT_DIR%\..\..\build\setup_vars_opencv3.cmd" (
+ @ECHO OFF
+ SETLOCAL
+
+ SET SCRIPT_DIR=%~dp0
-CALL "%SCRIPT_DIR%\..\..\build\setup_vars_opencv3.cmd"
++IF NOT EXIST "%SCRIPT_DIR%\..\..\build\setup_vars_opencv4.cmd" (
+ ECHO ERROR: OpenCV Winpack installation is required
+ pause
+ exit
+ )
+
+ :: Detect Python binary
+ python -V 2>nul
+ IF %ERRORLEVEL% EQU 0 (
+ SET PYTHON=python
+ GOTO :PYTHON_FOUND
+ )
+
+ CALL :QUERY_PYTHON 3.7
+ IF %ERRORLEVEL% EQU 0 GOTO :PYTHON_FOUND
+ CALL :QUERY_PYTHON 3.6
+ IF %ERRORLEVEL% EQU 0 GOTO :PYTHON_FOUND
+ CALL :QUERY_PYTHON 3.5
+ IF %ERRORLEVEL% EQU 0 GOTO :PYTHON_FOUND
+ CALL :QUERY_PYTHON 3.4
+ IF %ERRORLEVEL% EQU 0 GOTO :PYTHON_FOUND
+ CALL :QUERY_PYTHON 2.7
+ IF %ERRORLEVEL% EQU 0 GOTO :PYTHON_FOUND
+ GOTO :PYTHON_NOT_FOUND
+
+ :QUERY_PYTHON
+ SETLOCAL
+ SET PY_VERSION=%1
+ SET PYTHON_DIR=
+ CALL :regquery "HKCU\SOFTWARE\Python\PythonCore\%PY_VERSION%\InstallPath" PYTHON_DIR
+ IF EXIST "%PYTHON_DIR%\python.exe" (
+ SET "PYTHON=%PYTHON_DIR%\python.exe"
+ GOTO :QUERY_PYTHON_FOUND
+ )
+ CALL :regquery "HKLM\SOFTWARE\Python\PythonCore\%PY_VERSION%\InstallPath" PYTHON_DIR
+ IF EXIST "%PYTHON_DIR%\python.exe" (
+ SET "PYTHON=%PYTHON_DIR%\python.exe"
+ GOTO :QUERY_PYTHON_FOUND
+ )
+
+ ::echo Python %PY_VERSION% is not detected
+ ENDLOCAL
+ EXIT /B 1
+
+ :QUERY_PYTHON_FOUND
+ ECHO Found Python %PY_VERSION% from Windows Registry: %PYTHON%
+ ENDLOCAL & SET PYTHON=%PYTHON%
+ EXIT /B 0
+
+ IF exist C:\Python27-x64\python.exe (
+ SET PYTHON=C:\Python27-x64\python.exe
+ GOTO :PYTHON_FOUND
+ )
+ IF exist C:\Python27\python.exe (
+ SET PYTHON=C:\Python27\python.exe
+ GOTO :PYTHON_FOUND
+ )
+
+ :PYTHON_NOT_FOUND
+ ECHO ERROR: Python not found
+ IF NOT DEFINED OPENCV_BATCH_MODE ( pause )
+ EXIT /B
+
+ :PYTHON_FOUND
+ ECHO Using Python: %PYTHON%
+
+ :: Don't generate unnecessary .pyc cache files
+ SET PYTHONDONTWRITEBYTECODE=1
+
+ IF [%1]==[] goto rundemo
+
+ set SRC_FILENAME=%~dpnx1
+ echo SRC_FILENAME=%SRC_FILENAME%
+ call :dirname "%SRC_FILENAME%" SRC_DIR
+ call :dirname "%PYTHON%" PYTHON_DIR
+ PUSHD %SRC_DIR%
-CALL "%SCRIPT_DIR%\..\..\build\setup_vars_opencv3.cmd"
++CALL "%SCRIPT_DIR%\..\..\build\setup_vars_opencv4.cmd"
+ ECHO Run: %*
+ %PYTHON% %*
+ SET result=%errorlevel%
+ IF %result% NEQ 0 (
+ IF NOT DEFINED OPENCV_BATCH_MODE (
+ SET "PATH=%PYTHON_DIR%;%PATH%"
+ echo ================================================================================
+ echo ** Type 'python sample_name.py' to run sample
+ echo ** Type 'exit' to exit from interactive shell and open the build directory
+ echo ================================================================================
+ cmd /k echo Current directory: %CD%
+ )
+ )
+ POPD
+ EXIT /B %result%
+
+ :rundemo
+ PUSHD "%SCRIPT_DIR%\python"
++CALL "%SCRIPT_DIR%\..\..\build\setup_vars_opencv4.cmd"
+ %PYTHON% demo.py
+ SET result=%errorlevel%
+ IF %result% NEQ 0 (
+ IF NOT DEFINED OPENCV_BATCH_MODE ( pause )
+ )
+ POPD
+ EXIT /B %result%
+
+
+ :dirname file resultVar
+ setlocal
+ set _dir=%~dp1
+ set _dir=%_dir:~0,-1%
+ endlocal & set %2=%_dir%
+ EXIT /B 0
+
+ :regquery name resultVar
+ SETLOCAL
+ FOR /F "tokens=*" %%A IN ('REG QUERY "%1" /reg:64 /ve 2^>NUL ^| FIND "REG_SZ"') DO SET _val=%%A
+ IF "x%_val%x"=="xx" EXIT /B 1
+ SET _val=%_val:*REG_SZ=%
+ FOR /F "tokens=*" %%A IN ("%_val%") DO SET _val=%%A
+ ENDLOCAL & SET %2=%_val%
+ EXIT /B 0
// These descriptors are going to be detecting and computing BLOBS with 6 different params
// Param for first BLOB detector we want all
- typeDesc.push_back("BLOB"); // see http://docs.opencv.org/trunk/d0/d7a/classcv_1_1SimpleBlobDetector.html
- typeDesc.push_back("BLOB"); // see http://docs.opencv.org/3.4/d0/d7a/classcv_1_1SimpleBlobDetector.html
++ typeDesc.push_back("BLOB"); // see http://docs.opencv.org/master/d0/d7a/classcv_1_1SimpleBlobDetector.html
pBLOB.push_back(pDefaultBLOB);
pBLOB.back().filterByArea = true;
pBLOB.back().minArea = 1;
int main( int argc, const char** argv )
{
CommandLineParser parser(argc, argv,
- "{ i | ../data/lena_tmpl.jpg |image name }"
- "{ t | ../data/tmpl.png |template name }"
- "{ m | ../data/mask.png |mask name }"
+ "{ i | lena_tmpl.jpg |image name }"
+ "{ t | tmpl.png |template name }"
+ "{ m | mask.png |mask name }"
"{ cm| 3 |comparison method }");
- cout << "This program demonstrates the use of template matching with mask.\n\n";
+ cout << "This program demonstrates the use of template matching with mask." << endl
+ << endl
- << "Available methods: https://docs.opencv.org/3.4/df/dfb/group__imgproc__object.html#ga3a7850640f1fe1f58fe91a2d7583695d" << endl
++ << "Available methods: https://docs.opencv.org/master/df/dfb/group__imgproc__object.html#ga3a7850640f1fe1f58fe91a2d7583695d" << endl
+ << " TM_SQDIFF = " << (int)TM_SQDIFF << endl
+ << " TM_SQDIFF_NORMED = " << (int)TM_SQDIFF_NORMED << endl
+ << " TM_CCORR = " << (int)TM_CCORR << endl
+ << " TM_CCORR_NORMED = " << (int)TM_CCORR_NORMED << endl
+ << " TM_CCOEFF = " << (int)TM_CCOEFF << endl
+ << " TM_CCOEFF_NORMED = " << (int)TM_CCOEFF_NORMED << endl
+ << endl;
+
parser.printMessage();
- string filename = parser.get<string>("i");
- string tmplname = parser.get<string>("t");
- string maskname = parser.get<string>("m");
+ string filename = samples::findFile(parser.get<string>("i"));
+ string tmplname = samples::findFile(parser.get<string>("t"));
+ string maskname = samples::findFile(parser.get<string>("m"));
Mat img = imread(filename);
Mat tmpl = imread(tmplname);
Mat mask = imread(maskname);
"{ h help | | print help message }"
"{ i input | | specify input image}"
"{ c camera | -1 | enable camera capturing }"
- "{ v video | ../data/vtest.avi | use video as input }"
+ "{ v video | vtest.avi | use video as input }"
"{ g gray | | convert image to gray one or not}"
"{ s scale | 1.0 | resize the image before detect}"
- "{ o output | | specify output path when input is images}";
+ "{ o output | output.avi | specify output path when input is images}";
CommandLineParser cmd(argc, argv, keys);
if (cmd.has("help"))
{