mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 19:50:38 +08:00
dcaf923517
Conflicts: 3rdparty/ffmpeg/ffmpeg_version.cmake cmake/OpenCVFindLibsGrfmt.cmake cmake/templates/cvconfig.h.cmake modules/bioinspired/doc/retina/index.rst modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst modules/calib3d/src/precomp.hpp modules/contrib/src/inputoutput.cpp modules/contrib/src/precomp.hpp modules/core/include/opencv2/core/internal.hpp modules/core/include/opencv2/core/types_c.h modules/core/src/drawing.cpp modules/core/src/precomp.hpp modules/core/src/system.cpp modules/features2d/doc/common_interfaces_of_descriptor_matchers.rst modules/features2d/doc/common_interfaces_of_feature_detectors.rst modules/features2d/include/opencv2/features2d/features2d.hpp modules/features2d/src/precomp.hpp modules/flann/src/precomp.hpp modules/gpu/doc/camera_calibration_and_3d_reconstruction.rst modules/gpu/doc/image_filtering.rst modules/gpu/doc/image_processing.rst modules/gpu/doc/video.rst modules/gpu/perf/perf_imgproc.cpp modules/gpu/perf4au/main.cpp modules/gpu/src/imgproc.cpp modules/gpu/src/precomp.hpp modules/gpu/test/test_imgproc.cpp modules/highgui/CMakeLists.txt modules/highgui/test/test_precomp.hpp modules/imgproc/doc/structural_analysis_and_shape_descriptors.rst modules/imgproc/src/precomp.hpp modules/java/generator/src/cpp/Mat.cpp modules/legacy/src/precomp.hpp modules/ml/doc/k_nearest_neighbors.rst modules/ml/src/precomp.hpp modules/nonfree/doc/feature_detection.rst modules/nonfree/src/precomp.hpp modules/objdetect/include/opencv2/objdetect/objdetect.hpp modules/objdetect/src/cascadedetect.cpp modules/objdetect/src/hog.cpp modules/objdetect/src/precomp.hpp modules/objdetect/test/test_latentsvmdetector.cpp modules/ocl/src/hog.cpp modules/ocl/src/opencl/objdetect_hog.cl modules/ocl/src/precomp.hpp modules/photo/src/precomp.hpp modules/stitching/src/precomp.hpp modules/superres/perf/perf_precomp.hpp modules/superres/src/optical_flow.cpp modules/superres/src/precomp.hpp modules/superres/test/test_precomp.hpp modules/ts/include/opencv2/ts.hpp modules/video/src/precomp.hpp modules/videostab/src/precomp.hpp modules/world/src/precomp.hpp
79 lines
3.1 KiB
ReStructuredText
79 lines
3.1 KiB
ReStructuredText
Object Detection
|
|
================
|
|
|
|
.. highlight:: cpp
|
|
|
|
matchTemplate
|
|
-----------------
|
|
Compares a template against overlapped image regions.
|
|
|
|
.. ocv:function:: void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method )
|
|
|
|
.. ocv:pyfunction:: cv2.matchTemplate(image, templ, method[, result]) -> result
|
|
|
|
.. ocv:cfunction:: void cvMatchTemplate( const CvArr* image, const CvArr* templ, CvArr* result, int method )
|
|
|
|
:param image: Image where the search is running. It must be 8-bit or 32-bit floating-point.
|
|
|
|
:param templ: Searched template. It must be not greater than the source image and have the same data type.
|
|
|
|
:param result: Map of comparison results. It must be single-channel 32-bit floating-point. If ``image`` is :math:`W \times H` and ``templ`` is :math:`w \times h` , then ``result`` is :math:`(W-w+1) \times (H-h+1)` .
|
|
|
|
:param method: Parameter specifying the comparison method (see below).
|
|
|
|
The function slides through ``image`` , compares the
|
|
overlapped patches of size
|
|
:math:`w \times h` against ``templ`` using the specified method and stores the comparison results in ``result`` . Here are the formulae for the available comparison
|
|
methods (
|
|
:math:`I` denotes ``image``, :math:`T` ``template``, :math:`R` ``result`` ). The summation is done over template and/or the
|
|
image patch:
|
|
:math:`x' = 0...w-1, y' = 0...h-1`
|
|
* method=CV\_TM\_SQDIFF
|
|
|
|
.. math::
|
|
|
|
R(x,y)= \sum _{x',y'} (T(x',y')-I(x+x',y+y'))^2
|
|
|
|
* method=CV\_TM\_SQDIFF\_NORMED
|
|
|
|
.. math::
|
|
|
|
R(x,y)= \frac{\sum_{x',y'} (T(x',y')-I(x+x',y+y'))^2}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}
|
|
|
|
* method=CV\_TM\_CCORR
|
|
|
|
.. math::
|
|
|
|
R(x,y)= \sum _{x',y'} (T(x',y') \cdot I(x+x',y+y'))
|
|
|
|
* method=CV\_TM\_CCORR\_NORMED
|
|
|
|
.. math::
|
|
|
|
R(x,y)= \frac{\sum_{x',y'} (T(x',y') \cdot I(x+x',y+y'))}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}
|
|
|
|
* method=CV\_TM\_CCOEFF
|
|
|
|
.. math::
|
|
|
|
R(x,y)= \sum _{x',y'} (T'(x',y') \cdot I'(x+x',y+y'))
|
|
|
|
where
|
|
|
|
.. math::
|
|
|
|
\begin{array}{l} T'(x',y')=T(x',y') - 1/(w \cdot h) \cdot \sum _{x'',y''} T(x'',y'') \\ I'(x+x',y+y')=I(x+x',y+y') - 1/(w \cdot h) \cdot \sum _{x'',y''} I(x+x'',y+y'') \end{array}
|
|
|
|
* method=CV\_TM\_CCOEFF\_NORMED
|
|
|
|
.. math::
|
|
|
|
R(x,y)= \frac{ \sum_{x',y'} (T'(x',y') \cdot I'(x+x',y+y')) }{ \sqrt{\sum_{x',y'}T'(x',y')^2 \cdot \sum_{x',y'} I'(x+x',y+y')^2} }
|
|
|
|
After the function finishes the comparison, the best matches can be found as global minimums (when ``CV_TM_SQDIFF`` was used) or maximums (when ``CV_TM_CCORR`` or ``CV_TM_CCOEFF`` was used) using the
|
|
:ocv:func:`minMaxLoc` function. In case of a color image, template summation in the numerator and each sum in the denominator is done over all of the channels and separate mean values are used for each channel. That is, the function can take a color template and a color image. The result will still be a single-channel image, which is easier to analyze.
|
|
|
|
.. Sample code::
|
|
|
|
* : PYTHON : An example on how to match mouse selected regions in an image can be found at opencv_source_code/samples/python2/mouse_and_match.py
|