Merge pull request #3453 from mshabunin:doxygen-others
This commit is contained in:
commit
f61db41d25
@ -146,46 +146,76 @@ if(BUILD_DOCS AND HAVE_SPHINX)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ========= Doxygen docs =========
|
# ========= Doxygen docs =========
|
||||||
if(BUILD_DOCS AND HAVE_DOXYGEN)
|
|
||||||
# documented modules list
|
|
||||||
set(candidates)
|
|
||||||
list(APPEND candidates ${BASE_MODULES} ${EXTRA_MODULES})
|
|
||||||
# blacklisted modules
|
|
||||||
ocv_list_filterout(candidates "^ts$")
|
|
||||||
|
|
||||||
# gathering headers
|
macro(make_reference result modules_list black_list)
|
||||||
set(all_headers) # files and dirs to process
|
set(_res)
|
||||||
set(all_images) # image search paths
|
foreach(m ${${modules_list}})
|
||||||
set(reflist) # modules reference
|
list(FIND ${black_list} ${m} _pos)
|
||||||
foreach(m ${candidates})
|
if(${_pos} EQUAL -1)
|
||||||
set(reflist "${reflist} \n- @subpage ${m}")
|
set(_res "${_res} @ref ${m} | ${m} \n")
|
||||||
set(all_headers ${all_headers} "${OPENCV_MODULE_opencv_${m}_HEADERS}")
|
|
||||||
set(docs_dir "${OPENCV_MODULE_opencv_${m}_LOCATION}/doc")
|
|
||||||
if(EXISTS ${docs_dir})
|
|
||||||
set(all_images ${all_images} ${docs_dir})
|
|
||||||
set(all_headers ${all_headers} ${docs_dir})
|
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
set(${result} ${_res})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
if(BUILD_DOCS AND HAVE_DOXYGEN)
|
||||||
|
# not documented modules list
|
||||||
|
list(APPEND blacklist "ts" "java" "python2" "python3" "world")
|
||||||
|
|
||||||
|
# gathering headers
|
||||||
|
set(paths_include)
|
||||||
|
set(paths_doc)
|
||||||
|
set(paths_bib)
|
||||||
|
set(deps)
|
||||||
|
foreach(m ${BASE_MODULES} ${EXTRA_MODULES})
|
||||||
|
list(FIND blacklist ${m} _pos)
|
||||||
|
if(${_pos} EQUAL -1)
|
||||||
|
# include folder
|
||||||
|
set(header_dir "${OPENCV_MODULE_opencv_${m}_LOCATION}/include")
|
||||||
|
if(EXISTS "${header_dir}")
|
||||||
|
list(APPEND paths_include "${header_dir}")
|
||||||
|
list(APPEND deps ${header_dir})
|
||||||
|
endif()
|
||||||
|
# doc folder
|
||||||
|
set(docs_dir "${OPENCV_MODULE_opencv_${m}_LOCATION}/doc")
|
||||||
|
if(EXISTS "${docs_dir}")
|
||||||
|
list(APPEND paths_doc "${docs_dir}")
|
||||||
|
list(APPEND deps ${docs_dir})
|
||||||
|
endif()
|
||||||
|
# BiBTeX file
|
||||||
|
set(bib_file "${docs_dir}/${m}.bib")
|
||||||
|
if(EXISTS "${bib_file}")
|
||||||
|
set(paths_bib "${paths_bib} ${bib_file}")
|
||||||
|
list(APPEND deps ${bib_file})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
|
||||||
# additional config
|
# additional config
|
||||||
set(doxyfile "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
|
set(doxyfile "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
|
||||||
set(rootfile "${CMAKE_CURRENT_BINARY_DIR}/root.markdown")
|
set(rootfile "${CMAKE_CURRENT_BINARY_DIR}/root.markdown")
|
||||||
set(all_headers ${all_headers} ${rootfile})
|
set(bibfile "${CMAKE_CURRENT_SOURCE_DIR}/opencv.bib")
|
||||||
string(REGEX REPLACE ";" " \\\\\\n" CMAKE_DOXYGEN_INPUT_LIST "${all_headers}")
|
string(REPLACE ";" " \\\n" CMAKE_DOXYGEN_INPUT_LIST "${rootfile} ; ${paths_include} ; ${paths_doc}")
|
||||||
string(REGEX REPLACE ";" " \\\\\\n" CMAKE_DOXYGEN_IMAGE_PATH "${all_images}")
|
string(REPLACE ";" " \\\n" CMAKE_DOXYGEN_IMAGE_PATH "${paths_doc}")
|
||||||
|
string(REPLACE ";" " \\\n" CMAKE_DOXYGEN_EXAMPLE_PATH "${CMAKE_SOURCE_DIR}/samples/cpp ; ${paths_doc}")
|
||||||
set(CMAKE_DOXYGEN_LAYOUT "${CMAKE_CURRENT_SOURCE_DIR}/DoxygenLayout.xml")
|
set(CMAKE_DOXYGEN_LAYOUT "${CMAKE_CURRENT_SOURCE_DIR}/DoxygenLayout.xml")
|
||||||
set(CMAKE_DOXYGEN_OUTPUT_PATH "doxygen")
|
set(CMAKE_DOXYGEN_OUTPUT_PATH "doxygen")
|
||||||
set(CMAKE_DOXYGEN_MODULES_REFERENCE "${reflist}")
|
set(CMAKE_EXTRA_BIB_FILES "${bibfile} ${paths_bib}")
|
||||||
set(CMAKE_DOXYGEN_EXAMPLE_PATH "${CMAKE_SOURCE_DIR}/samples/cpp")
|
|
||||||
|
# generate references
|
||||||
|
make_reference(CMAKE_DOXYGEN_MAIN_REFERENCE BASE_MODULES blacklist)
|
||||||
|
make_reference(CMAKE_DOXYGEN_EXTRA_REFERENCE EXTRA_MODULES blacklist)
|
||||||
|
|
||||||
# writing file
|
# writing file
|
||||||
configure_file(Doxyfile.in ${doxyfile} @ONLY)
|
configure_file(Doxyfile.in ${doxyfile} @ONLY)
|
||||||
configure_file(root.markdown.in ${rootfile} @ONLY)
|
configure_file(root.markdown.in ${rootfile} @ONLY)
|
||||||
configure_file(mymath.sty "${CMAKE_DOXYGEN_OUTPUT_PATH}/html/mymath.sty" @ONLY)
|
configure_file(mymath.sty "${CMAKE_DOXYGEN_OUTPUT_PATH}/html/mymath.sty" @ONLY)
|
||||||
|
configure_file(mymath.sty "${CMAKE_DOXYGEN_OUTPUT_PATH}/latex/mymath.sty" @ONLY)
|
||||||
|
|
||||||
add_custom_target(doxygen
|
add_custom_target(doxygen
|
||||||
COMMAND ${DOXYGEN_BUILD} ${doxyfile}
|
COMMAND ${DOXYGEN_BUILD} ${doxyfile}
|
||||||
DEPENDS ${doxyfile} ${all_headers} ${all_images})
|
DEPENDS ${doxyfile} ${rootfile} ${bibfile} ${deps})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HAVE_DOC_GENERATOR)
|
if(HAVE_DOC_GENERATOR)
|
||||||
|
@ -85,7 +85,7 @@ SHOW_FILES = YES
|
|||||||
SHOW_NAMESPACES = YES
|
SHOW_NAMESPACES = YES
|
||||||
FILE_VERSION_FILTER =
|
FILE_VERSION_FILTER =
|
||||||
LAYOUT_FILE = @CMAKE_DOXYGEN_LAYOUT@
|
LAYOUT_FILE = @CMAKE_DOXYGEN_LAYOUT@
|
||||||
CITE_BIB_FILES = @CMAKE_CURRENT_SOURCE_DIR@/opencv.bib
|
CITE_BIB_FILES = @CMAKE_EXTRA_BIB_FILES@
|
||||||
QUIET = YES
|
QUIET = YES
|
||||||
WARNINGS = YES
|
WARNINGS = YES
|
||||||
WARN_IF_UNDOCUMENTED = YES
|
WARN_IF_UNDOCUMENTED = YES
|
||||||
@ -99,7 +99,7 @@ FILE_PATTERNS =
|
|||||||
RECURSIVE = YES
|
RECURSIVE = YES
|
||||||
EXCLUDE =
|
EXCLUDE =
|
||||||
EXCLUDE_SYMLINKS = NO
|
EXCLUDE_SYMLINKS = NO
|
||||||
EXCLUDE_PATTERNS =
|
EXCLUDE_PATTERNS = *.inl.hpp *.impl.hpp *_detail.hpp */cudev/**/detail/*.hpp
|
||||||
EXCLUDE_SYMBOLS = cv::DataType<*> int
|
EXCLUDE_SYMBOLS = cv::DataType<*> int
|
||||||
EXAMPLE_PATH = @CMAKE_DOXYGEN_EXAMPLE_PATH@
|
EXAMPLE_PATH = @CMAKE_DOXYGEN_EXAMPLE_PATH@
|
||||||
EXAMPLE_PATTERNS = *
|
EXAMPLE_PATTERNS = *
|
||||||
@ -119,7 +119,7 @@ REFERENCES_LINK_SOURCE = YES
|
|||||||
SOURCE_TOOLTIPS = YES
|
SOURCE_TOOLTIPS = YES
|
||||||
USE_HTAGS = NO
|
USE_HTAGS = NO
|
||||||
VERBATIM_HEADERS = NO
|
VERBATIM_HEADERS = NO
|
||||||
ALPHABETICAL_INDEX = NO
|
ALPHABETICAL_INDEX = YES
|
||||||
COLS_IN_ALPHA_INDEX = 5
|
COLS_IN_ALPHA_INDEX = 5
|
||||||
IGNORE_PREFIX =
|
IGNORE_PREFIX =
|
||||||
GENERATE_HTML = YES
|
GENERATE_HTML = YES
|
||||||
@ -222,6 +222,7 @@ INCLUDE_FILE_PATTERNS =
|
|||||||
PREDEFINED = __cplusplus=1 \
|
PREDEFINED = __cplusplus=1 \
|
||||||
HAVE_IPP_A=1 \
|
HAVE_IPP_A=1 \
|
||||||
CVAPI(x)=x \
|
CVAPI(x)=x \
|
||||||
|
CV_DOXYGEN= \
|
||||||
CV_EXPORTS= \
|
CV_EXPORTS= \
|
||||||
CV_EXPORTS_W= \
|
CV_EXPORTS_W= \
|
||||||
CV_EXPORTS_W_SIMPLE= \
|
CV_EXPORTS_W_SIMPLE= \
|
||||||
@ -241,7 +242,8 @@ PREDEFINED = __cplusplus=1 \
|
|||||||
CV_INLINE= \
|
CV_INLINE= \
|
||||||
CV_NORETURN= \
|
CV_NORETURN= \
|
||||||
CV_DEFAULT(x)=" = x" \
|
CV_DEFAULT(x)=" = x" \
|
||||||
CV_NEON=1
|
CV_NEON=1 \
|
||||||
|
FLANN_DEPRECATED=
|
||||||
EXPAND_AS_DEFINED =
|
EXPAND_AS_DEFINED =
|
||||||
SKIP_FUNCTION_MACROS = YES
|
SKIP_FUNCTION_MACROS = YES
|
||||||
TAGFILES =
|
TAGFILES =
|
||||||
|
2
doc/disabled_doc_warnings.txt
Normal file
2
doc/disabled_doc_warnings.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# doxygen citelist build workaround
|
||||||
|
citelist : .*Unexpected new line character.*
|
@ -8,7 +8,8 @@ MathJax.Hub.Config(
|
|||||||
forkthree: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ \\end{array} \\right.", 6],
|
forkthree: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ \\end{array} \\right.", 6],
|
||||||
vecthree: ["\\begin{bmatrix} #1\\\\ #2\\\\ #3 \\end{bmatrix}", 3],
|
vecthree: ["\\begin{bmatrix} #1\\\\ #2\\\\ #3 \\end{bmatrix}", 3],
|
||||||
vecthreethree: ["\\begin{bmatrix} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{bmatrix}", 9],
|
vecthreethree: ["\\begin{bmatrix} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{bmatrix}", 9],
|
||||||
hdotsfor: ["\\dots", 1]
|
hdotsfor: ["\\dots", 1],
|
||||||
|
mathbbm: ["\\mathbb{#1}", 1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
\usepackage{euler}
|
\usepackage{euler}
|
||||||
\usepackage{amssymb}
|
\usepackage{amssymb}
|
||||||
\usepackage{amsmath}
|
\usepackage{amsmath}
|
||||||
|
\usepackage{bbm}
|
||||||
|
|
||||||
\newcommand{\matTT}[9]{
|
\newcommand{\matTT}[9]{
|
||||||
\[
|
\[
|
||||||
|
1175
doc/opencv.bib
1175
doc/opencv.bib
File diff suppressed because it is too large
Load Diff
@ -3,9 +3,14 @@ OpenCV modules {#mainpage}
|
|||||||
|
|
||||||
@subpage intro
|
@subpage intro
|
||||||
|
|
||||||
Module name | Folder
|
### Main modules
|
||||||
------------- | -------------
|
|
||||||
@ref core | core
|
|
||||||
@ref imgproc | imgproc
|
|
||||||
|
|
||||||
<!-- @CMAKE_DOXYGEN_MODULES_REFERENCE@ -->
|
Module name | Folder
|
||||||
|
-------------- | -------------
|
||||||
|
@CMAKE_DOXYGEN_MAIN_REFERENCE@
|
||||||
|
|
||||||
|
### Extra modules
|
||||||
|
|
||||||
|
Module name | Folder
|
||||||
|
-------------- | -------------
|
||||||
|
@CMAKE_DOXYGEN_EXTRA_REFERENCE@
|
||||||
|
@ -3,6 +3,12 @@
|
|||||||
|
|
||||||
#include <camera_properties.h>
|
#include <camera_properties.h>
|
||||||
|
|
||||||
|
/** @defgroup androidcamera Android Camera Support
|
||||||
|
*/
|
||||||
|
|
||||||
|
//! @addtogroup androidcamera
|
||||||
|
//! @{
|
||||||
|
|
||||||
class CameraActivity
|
class CameraActivity
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -44,4 +50,6 @@ private:
|
|||||||
int frameHeight;
|
int frameHeight;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
#ifndef CAMERA_PROPERTIES_H
|
#ifndef CAMERA_PROPERTIES_H
|
||||||
#define CAMERA_PROPERTIES_H
|
#define CAMERA_PROPERTIES_H
|
||||||
|
|
||||||
|
//! @addtogroup androidcamera
|
||||||
|
//! @{
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ANDROID_CAMERA_PROPERTY_FRAMEWIDTH = 0,
|
ANDROID_CAMERA_PROPERTY_FRAMEWIDTH = 0,
|
||||||
ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT = 1,
|
ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT = 1,
|
||||||
@ -67,4 +70,6 @@ enum {
|
|||||||
ANDROID_CAMERA_FOCUS_DISTANCE_FAR_INDEX
|
ANDROID_CAMERA_FOCUS_DISTANCE_FAR_INDEX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
#endif // CAMERA_PROPERTIES_H
|
#endif // CAMERA_PROPERTIES_H
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -50,6 +50,10 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup calib3d_c
|
||||||
|
@{
|
||||||
|
*/
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* Camera Calibration, Pose Estimation and Stereo *
|
* Camera Calibration, Pose Estimation and Stereo *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
@ -371,6 +375,8 @@ CVAPI(void) cvReprojectImageTo3D( const CvArr* disparityImage,
|
|||||||
CvArr* _3dImage, const CvMat* Q,
|
CvArr* _3dImage, const CvMat* Q,
|
||||||
int handleMissingValues CV_DEFAULT(0) );
|
int handleMissingValues CV_DEFAULT(0) );
|
||||||
|
|
||||||
|
/** @} calib3d_c */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
|
||||||
|
@ -75,6 +75,9 @@
|
|||||||
@defgroup core_opengl OpenGL interoperability
|
@defgroup core_opengl OpenGL interoperability
|
||||||
@defgroup core_ipp Intel IPP Asynchronous C/C++ Converters
|
@defgroup core_ipp Intel IPP Asynchronous C/C++ Converters
|
||||||
@defgroup core_optim Optimization Algorithms
|
@defgroup core_optim Optimization Algorithms
|
||||||
|
@defgroup core_directx DirectX interoperability
|
||||||
|
@defgroup core_eigen Eigen support
|
||||||
|
@defgroup core_opencl OpenCL support
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -51,13 +51,6 @@
|
|||||||
#include "opencv2/core.hpp"
|
#include "opencv2/core.hpp"
|
||||||
#include "opencv2/core/cuda_types.hpp"
|
#include "opencv2/core/cuda_types.hpp"
|
||||||
|
|
||||||
/**
|
|
||||||
@defgroup cuda CUDA-accelerated Computer Vision
|
|
||||||
@{
|
|
||||||
@defgroup cuda_struct Data structures
|
|
||||||
@}
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
//! @addtogroup cuda_struct
|
//! @addtogroup cuda_struct
|
||||||
@ -65,8 +58,28 @@ namespace cv { namespace cuda {
|
|||||||
|
|
||||||
//////////////////////////////// GpuMat ///////////////////////////////
|
//////////////////////////////// GpuMat ///////////////////////////////
|
||||||
|
|
||||||
//! Smart pointer for GPU memory with reference counting.
|
/** @brief Base storage class for GPU memory with reference counting.
|
||||||
//! Its interface is mostly similar with cv::Mat.
|
|
||||||
|
Its interface matches the Mat interface with the following limitations:
|
||||||
|
|
||||||
|
- no arbitrary dimensions support (only 2D)
|
||||||
|
- no functions that return references to their data (because references on GPU are not valid for
|
||||||
|
CPU)
|
||||||
|
- no expression templates technique support
|
||||||
|
|
||||||
|
Beware that the latter limitation may lead to overloaded matrix operators that cause memory
|
||||||
|
allocations. The GpuMat class is convertible to cuda::PtrStepSz and cuda::PtrStep so it can be
|
||||||
|
passed directly to the kernel.
|
||||||
|
|
||||||
|
@note In contrast with Mat, in most cases GpuMat::isContinuous() == false . This means that rows are
|
||||||
|
aligned to a size depending on the hardware. Single-row GpuMat is always a continuous matrix.
|
||||||
|
|
||||||
|
@note You are not recommended to leave static or global GpuMat variables allocated, that is, to rely
|
||||||
|
on its destructor. The destruction order of such variables and CUDA context is undefined. GPU memory
|
||||||
|
release function returns error if the CUDA context has been destroyed before.
|
||||||
|
|
||||||
|
@sa Mat
|
||||||
|
*/
|
||||||
class CV_EXPORTS GpuMat
|
class CV_EXPORTS GpuMat
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -277,11 +290,28 @@ public:
|
|||||||
Allocator* allocator;
|
Allocator* allocator;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! creates continuous matrix
|
/** @brief Creates a continuous matrix.
|
||||||
|
|
||||||
|
@param rows Row count.
|
||||||
|
@param cols Column count.
|
||||||
|
@param type Type of the matrix.
|
||||||
|
@param arr Destination matrix. This parameter changes only if it has a proper type and area (
|
||||||
|
\f$\texttt{rows} \times \texttt{cols}\f$ ).
|
||||||
|
|
||||||
|
Matrix is called continuous if its elements are stored continuously, that is, without gaps at the
|
||||||
|
end of each row.
|
||||||
|
*/
|
||||||
CV_EXPORTS void createContinuous(int rows, int cols, int type, OutputArray arr);
|
CV_EXPORTS void createContinuous(int rows, int cols, int type, OutputArray arr);
|
||||||
|
|
||||||
//! ensures that size of the given matrix is not less than (rows, cols) size
|
/** @brief Ensures that the size of a matrix is big enough and the matrix has a proper type.
|
||||||
//! and matrix type is match specified one too
|
|
||||||
|
@param rows Minimum desired number of rows.
|
||||||
|
@param cols Minimum desired number of columns.
|
||||||
|
@param type Desired matrix type.
|
||||||
|
@param arr Destination matrix.
|
||||||
|
|
||||||
|
The function does not reallocate memory if the matrix has proper attributes already.
|
||||||
|
*/
|
||||||
CV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, OutputArray arr);
|
CV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, OutputArray arr);
|
||||||
|
|
||||||
CV_EXPORTS GpuMat allocMatFromBuf(int rows, int cols, int type, GpuMat& mat);
|
CV_EXPORTS GpuMat allocMatFromBuf(int rows, int cols, int type, GpuMat& mat);
|
||||||
@ -292,10 +322,21 @@ CV_EXPORTS void setBufferPoolConfig(int deviceId, size_t stackSize, int stackCou
|
|||||||
|
|
||||||
//////////////////////////////// CudaMem ////////////////////////////////
|
//////////////////////////////// CudaMem ////////////////////////////////
|
||||||
|
|
||||||
//! CudaMem is limited cv::Mat with page locked memory allocation.
|
/** @brief Class with reference counting wrapping special memory type allocation functions from CUDA.
|
||||||
//! Page locked memory is only needed for async and faster coping to GPU.
|
|
||||||
//! It is convertable to cv::Mat header without reference counting
|
Its interface is also Mat-like but with additional memory type parameters.
|
||||||
//! so you can use it with other opencv functions.
|
|
||||||
|
- **PAGE_LOCKED** sets a page locked memory type used commonly for fast and asynchronous
|
||||||
|
uploading/downloading data from/to GPU.
|
||||||
|
- **SHARED** specifies a zero copy memory allocation that enables mapping the host memory to GPU
|
||||||
|
address space, if supported.
|
||||||
|
- **WRITE_COMBINED** sets the write combined buffer that is not cached by CPU. Such buffers are
|
||||||
|
used to supply GPU with data when GPU only reads it. The advantage is a better CPU cache
|
||||||
|
utilization.
|
||||||
|
|
||||||
|
@note Allocation size of such memory types is usually limited. For more details, see *CUDA 2.2
|
||||||
|
Pinned Memory APIs* document or *CUDA C Programming Guide*.
|
||||||
|
*/
|
||||||
class CV_EXPORTS CudaMem
|
class CV_EXPORTS CudaMem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -335,7 +376,13 @@ public:
|
|||||||
//! returns matrix header with disabled reference counting for CudaMem data.
|
//! returns matrix header with disabled reference counting for CudaMem data.
|
||||||
Mat createMatHeader() const;
|
Mat createMatHeader() const;
|
||||||
|
|
||||||
//! maps host memory into device address space and returns GpuMat header for it. Throws exception if not supported by hardware.
|
/** @brief Maps CPU memory to GPU address space and creates the cuda::GpuMat header without reference counting
|
||||||
|
for it.
|
||||||
|
|
||||||
|
This can be done only if memory was allocated with the SHARED flag and if it is supported by the
|
||||||
|
hardware. Laptops often share video and CPU memory, so address spaces can be mapped, which
|
||||||
|
eliminates an extra copy.
|
||||||
|
*/
|
||||||
GpuMat createGpuMatHeader() const;
|
GpuMat createGpuMatHeader() const;
|
||||||
|
|
||||||
// Please see cv::Mat for descriptions
|
// Please see cv::Mat for descriptions
|
||||||
@ -363,17 +410,28 @@ public:
|
|||||||
AllocType alloc_type;
|
AllocType alloc_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! page-locks the matrix m memory and maps it for the device(s)
|
/** @brief Page-locks the memory of matrix and maps it for the device(s).
|
||||||
|
|
||||||
|
@param m Input matrix.
|
||||||
|
*/
|
||||||
CV_EXPORTS void registerPageLocked(Mat& m);
|
CV_EXPORTS void registerPageLocked(Mat& m);
|
||||||
|
|
||||||
//! unmaps the memory of matrix m, and makes it pageable again
|
/** @brief Unmaps the memory of matrix and makes it pageable again.
|
||||||
|
|
||||||
|
@param m Input matrix.
|
||||||
|
*/
|
||||||
CV_EXPORTS void unregisterPageLocked(Mat& m);
|
CV_EXPORTS void unregisterPageLocked(Mat& m);
|
||||||
|
|
||||||
///////////////////////////////// Stream //////////////////////////////////
|
///////////////////////////////// Stream //////////////////////////////////
|
||||||
|
|
||||||
//! Encapculates Cuda Stream. Provides interface for async coping.
|
/** @brief This class encapsulates a queue of asynchronous calls.
|
||||||
//! Passed to each function that supports async kernel execution.
|
|
||||||
//! Reference counting is enabled.
|
@note Currently, you may face problems if an operation is enqueued twice with different data. Some
|
||||||
|
functions use the constant GPU memory, and next call may update the memory before the previous one
|
||||||
|
has been finished. But calling different operations asynchronously is safe because each operation
|
||||||
|
has its own constant buffer. Memory copy/upload/download/set operations to the buffers you hold are
|
||||||
|
also safe. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS Stream
|
class CV_EXPORTS Stream
|
||||||
{
|
{
|
||||||
typedef void (Stream::*bool_type)() const;
|
typedef void (Stream::*bool_type)() const;
|
||||||
@ -385,16 +443,26 @@ public:
|
|||||||
//! creates a new asynchronous stream
|
//! creates a new asynchronous stream
|
||||||
Stream();
|
Stream();
|
||||||
|
|
||||||
//! queries an asynchronous stream for completion status
|
/** @brief Returns true if the current stream queue is finished. Otherwise, it returns false.
|
||||||
|
*/
|
||||||
bool queryIfComplete() const;
|
bool queryIfComplete() const;
|
||||||
|
|
||||||
//! waits for stream tasks to complete
|
/** @brief Blocks the current CPU thread until all operations in the stream are complete.
|
||||||
|
*/
|
||||||
void waitForCompletion();
|
void waitForCompletion();
|
||||||
|
|
||||||
//! makes a compute stream wait on an event
|
/** @brief Makes a compute stream wait on an event.
|
||||||
|
*/
|
||||||
void waitEvent(const Event& event);
|
void waitEvent(const Event& event);
|
||||||
|
|
||||||
//! adds a callback to be called on the host after all currently enqueued items in the stream have completed
|
/** @brief Adds a callback to be called on the host after all currently enqueued items in the stream have
|
||||||
|
completed.
|
||||||
|
|
||||||
|
@note Callbacks must not make any CUDA API calls. Callbacks must not perform any synchronization
|
||||||
|
that may depend on outstanding device work or other callbacks that are not mandated to run earlier.
|
||||||
|
Callbacks without a mandated order (in independent streams) execute in undefined order and may be
|
||||||
|
serialized.
|
||||||
|
*/
|
||||||
void enqueueHostCallback(StreamCallback callback, void* userData);
|
void enqueueHostCallback(StreamCallback callback, void* userData);
|
||||||
|
|
||||||
//! return Stream object for default CUDA stream
|
//! return Stream object for default CUDA stream
|
||||||
@ -446,21 +514,41 @@ private:
|
|||||||
friend struct EventAccessor;
|
friend struct EventAccessor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} cuda_struct
|
||||||
|
|
||||||
//////////////////////////////// Initialization & Info ////////////////////////
|
//////////////////////////////// Initialization & Info ////////////////////////
|
||||||
|
|
||||||
//! this is the only function that do not throw exceptions if the library is compiled without CUDA
|
//! @addtogroup cuda_init
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Returns the number of installed CUDA-enabled devices.
|
||||||
|
|
||||||
|
Use this function before any other CUDA functions calls. If OpenCV is compiled without CUDA support,
|
||||||
|
this function returns 0.
|
||||||
|
*/
|
||||||
CV_EXPORTS int getCudaEnabledDeviceCount();
|
CV_EXPORTS int getCudaEnabledDeviceCount();
|
||||||
|
|
||||||
//! set device to be used for GPU executions for the calling host thread
|
/** @brief Sets a device and initializes it for the current thread.
|
||||||
|
|
||||||
|
@param device System index of a CUDA device starting with 0.
|
||||||
|
|
||||||
|
If the call of this function is omitted, a default device is initialized at the fist CUDA usage.
|
||||||
|
*/
|
||||||
CV_EXPORTS void setDevice(int device);
|
CV_EXPORTS void setDevice(int device);
|
||||||
|
|
||||||
//! returns which device is currently being used for the calling host thread
|
/** @brief Returns the current device index set by cuda::setDevice or initialized by default.
|
||||||
|
*/
|
||||||
CV_EXPORTS int getDevice();
|
CV_EXPORTS int getDevice();
|
||||||
|
|
||||||
//! explicitly destroys and cleans up all resources associated with the current device in the current process
|
/** @brief Explicitly destroys and cleans up all resources associated with the current device in the current
|
||||||
//! any subsequent API call to this device will reinitialize the device
|
process.
|
||||||
|
|
||||||
|
Any subsequent API call to this device will reinitialize the device.
|
||||||
|
*/
|
||||||
CV_EXPORTS void resetDevice();
|
CV_EXPORTS void resetDevice();
|
||||||
|
|
||||||
|
/** @brief Enumeration providing CUDA computing features.
|
||||||
|
*/
|
||||||
enum FeatureSet
|
enum FeatureSet
|
||||||
{
|
{
|
||||||
FEATURE_SET_COMPUTE_10 = 10,
|
FEATURE_SET_COMPUTE_10 = 10,
|
||||||
@ -482,12 +570,27 @@ enum FeatureSet
|
|||||||
//! checks whether current device supports the given feature
|
//! checks whether current device supports the given feature
|
||||||
CV_EXPORTS bool deviceSupports(FeatureSet feature_set);
|
CV_EXPORTS bool deviceSupports(FeatureSet feature_set);
|
||||||
|
|
||||||
//! information about what GPU archs this OpenCV CUDA module was compiled for
|
/** @brief Class providing a set of static methods to check what NVIDIA\* card architecture the CUDA module was
|
||||||
|
built for.
|
||||||
|
|
||||||
|
According to the CUDA C Programming Guide Version 3.2: "PTX code produced for some specific compute
|
||||||
|
capability can always be compiled to binary code of greater or equal compute capability".
|
||||||
|
*/
|
||||||
class CV_EXPORTS TargetArchs
|
class CV_EXPORTS TargetArchs
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief The following method checks whether the module was built with the support of the given feature:
|
||||||
|
|
||||||
|
@param feature_set Features to be checked. See :ocvcuda::FeatureSet.
|
||||||
|
*/
|
||||||
static bool builtWith(FeatureSet feature_set);
|
static bool builtWith(FeatureSet feature_set);
|
||||||
|
|
||||||
|
/** @brief There is a set of methods to check whether the module contains intermediate (PTX) or binary CUDA
|
||||||
|
code for the given architecture(s):
|
||||||
|
|
||||||
|
@param major Major compute capability version.
|
||||||
|
@param minor Minor compute capability version.
|
||||||
|
*/
|
||||||
static bool has(int major, int minor);
|
static bool has(int major, int minor);
|
||||||
static bool hasPtx(int major, int minor);
|
static bool hasPtx(int major, int minor);
|
||||||
static bool hasBin(int major, int minor);
|
static bool hasBin(int major, int minor);
|
||||||
@ -498,17 +601,25 @@ public:
|
|||||||
static bool hasEqualOrGreaterBin(int major, int minor);
|
static bool hasEqualOrGreaterBin(int major, int minor);
|
||||||
};
|
};
|
||||||
|
|
||||||
//! information about the given GPU.
|
/** @brief Class providing functionality for querying the specified GPU properties.
|
||||||
|
*/
|
||||||
class CV_EXPORTS DeviceInfo
|
class CV_EXPORTS DeviceInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! creates DeviceInfo object for the current GPU
|
//! creates DeviceInfo object for the current GPU
|
||||||
DeviceInfo();
|
DeviceInfo();
|
||||||
|
|
||||||
//! creates DeviceInfo object for the given GPU
|
/** @brief The constructors.
|
||||||
|
|
||||||
|
@param device_id System index of the CUDA device starting with 0.
|
||||||
|
|
||||||
|
Constructs the DeviceInfo object for the specified device. If device_id parameter is missed, it
|
||||||
|
constructs an object for the current device.
|
||||||
|
*/
|
||||||
DeviceInfo(int device_id);
|
DeviceInfo(int device_id);
|
||||||
|
|
||||||
//! device number.
|
/** @brief Returns system index of the CUDA device starting with 0.
|
||||||
|
*/
|
||||||
int deviceID() const;
|
int deviceID() const;
|
||||||
|
|
||||||
//! ASCII string identifying device
|
//! ASCII string identifying device
|
||||||
@ -680,10 +791,19 @@ public:
|
|||||||
size_t freeMemory() const;
|
size_t freeMemory() const;
|
||||||
size_t totalMemory() const;
|
size_t totalMemory() const;
|
||||||
|
|
||||||
//! checks whether device supports the given feature
|
/** @brief Provides information on CUDA feature support.
|
||||||
|
|
||||||
|
@param feature_set Features to be checked. See cuda::FeatureSet.
|
||||||
|
|
||||||
|
This function returns true if the device has the specified CUDA feature. Otherwise, it returns false
|
||||||
|
*/
|
||||||
bool supports(FeatureSet feature_set) const;
|
bool supports(FeatureSet feature_set) const;
|
||||||
|
|
||||||
//! checks whether the CUDA module can be run on the given device
|
/** @brief Checks the CUDA module and device compatibility.
|
||||||
|
|
||||||
|
This function returns true if the CUDA module can be run on the specified device. Otherwise, it
|
||||||
|
returns false .
|
||||||
|
*/
|
||||||
bool isCompatible() const;
|
bool isCompatible() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -693,7 +813,7 @@ private:
|
|||||||
CV_EXPORTS void printCudaDeviceInfo(int device);
|
CV_EXPORTS void printCudaDeviceInfo(int device);
|
||||||
CV_EXPORTS void printShortCudaDeviceInfo(int device);
|
CV_EXPORTS void printShortCudaDeviceInfo(int device);
|
||||||
|
|
||||||
//! @}
|
//! @} cuda_init
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
|
@ -66,6 +66,11 @@ namespace cv
|
|||||||
class Stream;
|
class Stream;
|
||||||
class Event;
|
class Event;
|
||||||
|
|
||||||
|
/** @brief Class that enables getting cudaStream_t from cuda::Stream
|
||||||
|
|
||||||
|
because it is the only public header that depends on the CUDA Runtime API. Including it
|
||||||
|
brings a dependency to your code.
|
||||||
|
*/
|
||||||
struct StreamAccessor
|
struct StreamAccessor
|
||||||
{
|
{
|
||||||
CV_EXPORTS static cudaStream_t getStream(const Stream& stream);
|
CV_EXPORTS static cudaStream_t getStream(const Stream& stream);
|
||||||
|
@ -89,6 +89,11 @@ namespace cv
|
|||||||
size_t size;
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Structure similar to cuda::PtrStepSz but containing only a pointer and row step.
|
||||||
|
|
||||||
|
Width and height fields are excluded due to performance reasons. The structure is intended
|
||||||
|
for internal use or for users who write device code.
|
||||||
|
*/
|
||||||
template <typename T> struct PtrStep : public DevPtr<T>
|
template <typename T> struct PtrStep : public DevPtr<T>
|
||||||
{
|
{
|
||||||
__CV_CUDA_HOST_DEVICE__ PtrStep() : step(0) {}
|
__CV_CUDA_HOST_DEVICE__ PtrStep() : step(0) {}
|
||||||
@ -104,6 +109,12 @@ namespace cv
|
|||||||
__CV_CUDA_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; }
|
__CV_CUDA_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Lightweight class encapsulating pitched memory on a GPU and passed to nvcc-compiled code (CUDA
|
||||||
|
kernels).
|
||||||
|
|
||||||
|
Typically, it is used internally by OpenCV and by users who write device code. You can call
|
||||||
|
its members from both host and device code.
|
||||||
|
*/
|
||||||
template <typename T> struct PtrStepSz : public PtrStep<T>
|
template <typename T> struct PtrStepSz : public PtrStep<T>
|
||||||
{
|
{
|
||||||
__CV_CUDA_HOST_DEVICE__ PtrStepSz() : cols(0), rows(0) {}
|
__CV_CUDA_HOST_DEVICE__ PtrStepSz() : cols(0), rows(0) {}
|
||||||
|
85
modules/cuda/doc/introduction.markdown
Normal file
85
modules/cuda/doc/introduction.markdown
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
CUDA Module Introduction {#cuda_intro}
|
||||||
|
========================
|
||||||
|
|
||||||
|
General Information
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The OpenCV CUDA module is a set of classes and functions to utilize CUDA computational capabilities.
|
||||||
|
It is implemented using NVIDIA\* CUDA\* Runtime API and supports only NVIDIA GPUs. The OpenCV CUDA
|
||||||
|
module includes utility functions, low-level vision primitives, and high-level algorithms. The
|
||||||
|
utility functions and low-level primitives provide a powerful infrastructure for developing fast
|
||||||
|
vision algorithms taking advantage of CUDA whereas the high-level functionality includes some
|
||||||
|
state-of-the-art algorithms (such as stereo correspondence, face and people detectors, and others)
|
||||||
|
ready to be used by the application developers.
|
||||||
|
|
||||||
|
The CUDA module is designed as a host-level API. This means that if you have pre-compiled OpenCV
|
||||||
|
CUDA binaries, you are not required to have the CUDA Toolkit installed or write any extra code to
|
||||||
|
make use of the CUDA.
|
||||||
|
|
||||||
|
The OpenCV CUDA module is designed for ease of use and does not require any knowledge of CUDA.
|
||||||
|
Though, such a knowledge will certainly be useful to handle non-trivial cases or achieve the highest
|
||||||
|
performance. It is helpful to understand the cost of various operations, what the GPU does, what the
|
||||||
|
preferred data formats are, and so on. The CUDA module is an effective instrument for quick
|
||||||
|
implementation of CUDA-accelerated computer vision algorithms. However, if your algorithm involves
|
||||||
|
many simple operations, then, for the best possible performance, you may still need to write your
|
||||||
|
own kernels to avoid extra write and read operations on the intermediate results.
|
||||||
|
|
||||||
|
To enable CUDA support, configure OpenCV using CMake with WITH\_CUDA=ON . When the flag is set and
|
||||||
|
if CUDA is installed, the full-featured OpenCV CUDA module is built. Otherwise, the module is still
|
||||||
|
built but at runtime all functions from the module throw Exception with CV\_GpuNotSupported error
|
||||||
|
code, except for cuda::getCudaEnabledDeviceCount(). The latter function returns zero GPU count in
|
||||||
|
this case. Building OpenCV without CUDA support does not perform device code compilation, so it does
|
||||||
|
not require the CUDA Toolkit installed. Therefore, using the cuda::getCudaEnabledDeviceCount()
|
||||||
|
function, you can implement a high-level algorithm that will detect GPU presence at runtime and
|
||||||
|
choose an appropriate implementation (CPU or GPU) accordingly.
|
||||||
|
|
||||||
|
Compilation for Different NVIDIA\* Platforms
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
NVIDIA\* compiler enables generating binary code (cubin and fatbin) and intermediate code (PTX).
|
||||||
|
Binary code often implies a specific GPU architecture and generation, so the compatibility with
|
||||||
|
other GPUs is not guaranteed. PTX is targeted for a virtual platform that is defined entirely by the
|
||||||
|
set of capabilities or features. Depending on the selected virtual platform, some of the
|
||||||
|
instructions are emulated or disabled, even if the real hardware supports all the features.
|
||||||
|
|
||||||
|
At the first call, the PTX code is compiled to binary code for the particular GPU using a JIT
|
||||||
|
compiler. When the target GPU has a compute capability (CC) lower than the PTX code, JIT fails. By
|
||||||
|
default, the OpenCV CUDA module includes:
|
||||||
|
|
||||||
|
\*
|
||||||
|
Binaries for compute capabilities 1.3 and 2.0 (controlled by CUDA\_ARCH\_BIN in CMake)
|
||||||
|
|
||||||
|
\*
|
||||||
|
PTX code for compute capabilities 1.1 and 1.3 (controlled by CUDA\_ARCH\_PTX in CMake)
|
||||||
|
|
||||||
|
This means that for devices with CC 1.3 and 2.0 binary images are ready to run. For all newer
|
||||||
|
platforms, the PTX code for 1.3 is JIT'ed to a binary image. For devices with CC 1.1 and 1.2, the
|
||||||
|
PTX for 1.1 is JIT'ed. For devices with CC 1.0, no code is available and the functions throw
|
||||||
|
Exception. For platforms where JIT compilation is performed first, the run is slow.
|
||||||
|
|
||||||
|
On a GPU with CC 1.0, you can still compile the CUDA module and most of the functions will run
|
||||||
|
flawlessly. To achieve this, add "1.0" to the list of binaries, for example,
|
||||||
|
CUDA\_ARCH\_BIN="1.0 1.3 2.0" . The functions that cannot be run on CC 1.0 GPUs throw an exception.
|
||||||
|
|
||||||
|
You can always determine at runtime whether the OpenCV GPU-built binaries (or PTX code) are
|
||||||
|
compatible with your GPU. The function cuda::DeviceInfo::isCompatible returns the compatibility
|
||||||
|
status (true/false).
|
||||||
|
|
||||||
|
Utilizing Multiple GPUs
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
In the current version, each of the OpenCV CUDA algorithms can use only a single GPU. So, to utilize
|
||||||
|
multiple GPUs, you have to manually distribute the work between GPUs. Switching active devie can be
|
||||||
|
done using cuda::setDevice() function. For more details please read Cuda C Programming Guide.
|
||||||
|
|
||||||
|
While developing algorithms for multiple GPUs, note a data passing overhead. For primitive functions
|
||||||
|
and small images, it can be significant, which may eliminate all the advantages of having multiple
|
||||||
|
GPUs. But for high-level algorithms, consider using multi-GPU acceleration. For example, the Stereo
|
||||||
|
Block Matching algorithm has been successfully parallelized using the following algorithm:
|
||||||
|
|
||||||
|
1. Split each image of the stereo pair into two horizontal overlapping stripes.
|
||||||
|
2. Process each pair of stripes (from the left and right images) on a separate Fermi\* GPU.
|
||||||
|
3. Merge the results into a single disparity map.
|
||||||
|
|
||||||
|
With this algorithm, a dual GPU gave a 180% performance increase comparing to the single Fermi GPU.
|
||||||
|
For a source code example, see <https://github.com/Itseez/opencv/tree/master/samples/gpu/>.
|
@ -49,10 +49,25 @@
|
|||||||
|
|
||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@defgroup cuda CUDA-accelerated Computer Vision
|
||||||
|
@ref cuda_intro "Introduction page"
|
||||||
|
@{
|
||||||
|
@defgroup cuda_init Initalization and Information
|
||||||
|
@defgroup cuda_struct Data Structures
|
||||||
|
@defgroup cuda_calib3d Camera Calibration and 3D Reconstruction
|
||||||
|
@defgroup cuda_objdetect Object Detection
|
||||||
|
@}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
|
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
|
||||||
|
|
||||||
|
//! @addtogroup cuda_objdetect
|
||||||
|
//! @{
|
||||||
|
|
||||||
struct CV_EXPORTS HOGConfidence
|
struct CV_EXPORTS HOGConfidence
|
||||||
{
|
{
|
||||||
double scale;
|
double scale;
|
||||||
@ -61,31 +76,92 @@ struct CV_EXPORTS HOGConfidence
|
|||||||
std::vector<double> part_scores[4];
|
std::vector<double> part_scores[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief The class implements Histogram of Oriented Gradients (@cite Dalal2005) object detector.
|
||||||
|
|
||||||
|
Interfaces of all methods are kept similar to the CPU HOG descriptor and detector analogues as much
|
||||||
|
as possible.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example applying the HOG descriptor for people detection can be found at
|
||||||
|
opencv_source_code/samples/cpp/peopledetect.cpp
|
||||||
|
- A CUDA example applying the HOG descriptor for people detection can be found at
|
||||||
|
opencv_source_code/samples/gpu/hog.cpp
|
||||||
|
- (Python) An example applying the HOG descriptor for people detection can be found at
|
||||||
|
opencv_source_code/samples/python2/peopledetect.py
|
||||||
|
*/
|
||||||
struct CV_EXPORTS HOGDescriptor
|
struct CV_EXPORTS HOGDescriptor
|
||||||
{
|
{
|
||||||
enum { DEFAULT_WIN_SIGMA = -1 };
|
enum { DEFAULT_WIN_SIGMA = -1 };
|
||||||
enum { DEFAULT_NLEVELS = 64 };
|
enum { DEFAULT_NLEVELS = 64 };
|
||||||
enum { DESCR_FORMAT_ROW_BY_ROW, DESCR_FORMAT_COL_BY_COL };
|
enum { DESCR_FORMAT_ROW_BY_ROW, DESCR_FORMAT_COL_BY_COL };
|
||||||
|
|
||||||
|
/** @brief Creates the HOG descriptor and detector.
|
||||||
|
|
||||||
|
@param win_size Detection window size. Align to block size and block stride.
|
||||||
|
@param block_size Block size in pixels. Align to cell size. Only (16,16) is supported for now.
|
||||||
|
@param block_stride Block stride. It must be a multiple of cell size.
|
||||||
|
@param cell_size Cell size. Only (8, 8) is supported for now.
|
||||||
|
@param nbins Number of bins. Only 9 bins per cell are supported for now.
|
||||||
|
@param win_sigma Gaussian smoothing window parameter.
|
||||||
|
@param threshold_L2hys L2-Hys normalization method shrinkage.
|
||||||
|
@param gamma_correction Flag to specify whether the gamma correction preprocessing is required or
|
||||||
|
not.
|
||||||
|
@param nlevels Maximum number of detection window increases.
|
||||||
|
*/
|
||||||
HOGDescriptor(Size win_size=Size(64, 128), Size block_size=Size(16, 16),
|
HOGDescriptor(Size win_size=Size(64, 128), Size block_size=Size(16, 16),
|
||||||
Size block_stride=Size(8, 8), Size cell_size=Size(8, 8),
|
Size block_stride=Size(8, 8), Size cell_size=Size(8, 8),
|
||||||
int nbins=9, double win_sigma=DEFAULT_WIN_SIGMA,
|
int nbins=9, double win_sigma=DEFAULT_WIN_SIGMA,
|
||||||
double threshold_L2hys=0.2, bool gamma_correction=true,
|
double threshold_L2hys=0.2, bool gamma_correction=true,
|
||||||
int nlevels=DEFAULT_NLEVELS);
|
int nlevels=DEFAULT_NLEVELS);
|
||||||
|
|
||||||
|
/** @brief Returns the number of coefficients required for the classification.
|
||||||
|
*/
|
||||||
size_t getDescriptorSize() const;
|
size_t getDescriptorSize() const;
|
||||||
|
/** @brief Returns the block histogram size.
|
||||||
|
*/
|
||||||
size_t getBlockHistogramSize() const;
|
size_t getBlockHistogramSize() const;
|
||||||
|
|
||||||
|
/** @brief Sets coefficients for the linear SVM classifier.
|
||||||
|
*/
|
||||||
void setSVMDetector(const std::vector<float>& detector);
|
void setSVMDetector(const std::vector<float>& detector);
|
||||||
|
|
||||||
|
/** @brief Returns coefficients of the classifier trained for people detection (for default window size).
|
||||||
|
*/
|
||||||
static std::vector<float> getDefaultPeopleDetector();
|
static std::vector<float> getDefaultPeopleDetector();
|
||||||
|
/** @brief Returns coefficients of the classifier trained for people detection (for 48x96 windows).
|
||||||
|
*/
|
||||||
static std::vector<float> getPeopleDetector48x96();
|
static std::vector<float> getPeopleDetector48x96();
|
||||||
|
/** @brief Returns coefficients of the classifier trained for people detection (for 64x128 windows).
|
||||||
|
*/
|
||||||
static std::vector<float> getPeopleDetector64x128();
|
static std::vector<float> getPeopleDetector64x128();
|
||||||
|
|
||||||
|
/** @brief Performs object detection without a multi-scale window.
|
||||||
|
|
||||||
|
@param img Source image. CV_8UC1 and CV_8UC4 types are supported for now.
|
||||||
|
@param found_locations Left-top corner points of detected objects boundaries.
|
||||||
|
@param hit_threshold Threshold for the distance between features and SVM classifying plane.
|
||||||
|
Usually it is 0 and should be specfied in the detector coefficients (as the last free
|
||||||
|
coefficient). But if the free coefficient is omitted (which is allowed), you can specify it
|
||||||
|
manually here.
|
||||||
|
@param win_stride Window stride. It must be a multiple of block stride.
|
||||||
|
@param padding Mock parameter to keep the CPU interface compatibility. It must be (0,0).
|
||||||
|
*/
|
||||||
void detect(const GpuMat& img, std::vector<Point>& found_locations,
|
void detect(const GpuMat& img, std::vector<Point>& found_locations,
|
||||||
double hit_threshold=0, Size win_stride=Size(),
|
double hit_threshold=0, Size win_stride=Size(),
|
||||||
Size padding=Size());
|
Size padding=Size());
|
||||||
|
|
||||||
|
/** @brief Performs object detection with a multi-scale window.
|
||||||
|
|
||||||
|
@param img Source image. See cuda::HOGDescriptor::detect for type limitations.
|
||||||
|
@param found_locations Detected objects boundaries.
|
||||||
|
@param hit_threshold Threshold for the distance between features and SVM classifying plane. See
|
||||||
|
cuda::HOGDescriptor::detect for details.
|
||||||
|
@param win_stride Window stride. It must be a multiple of block stride.
|
||||||
|
@param padding Mock parameter to keep the CPU interface compatibility. It must be (0,0).
|
||||||
|
@param scale0 Coefficient of the detection window increase.
|
||||||
|
@param group_threshold Coefficient to regulate the similarity threshold. When detected, some
|
||||||
|
objects can be covered by many rectangles. 0 means not to perform grouping. See groupRectangles .
|
||||||
|
*/
|
||||||
void detectMultiScale(const GpuMat& img, std::vector<Rect>& found_locations,
|
void detectMultiScale(const GpuMat& img, std::vector<Rect>& found_locations,
|
||||||
double hit_threshold=0, Size win_stride=Size(),
|
double hit_threshold=0, Size win_stride=Size(),
|
||||||
Size padding=Size(), double scale0=1.05,
|
Size padding=Size(), double scale0=1.05,
|
||||||
@ -98,6 +174,17 @@ struct CV_EXPORTS HOGDescriptor
|
|||||||
double hit_threshold, Size win_stride, Size padding,
|
double hit_threshold, Size win_stride, Size padding,
|
||||||
std::vector<HOGConfidence> &conf_out, int group_threshold);
|
std::vector<HOGConfidence> &conf_out, int group_threshold);
|
||||||
|
|
||||||
|
/** @brief Returns block descriptors computed for the whole image.
|
||||||
|
|
||||||
|
@param img Source image. See cuda::HOGDescriptor::detect for type limitations.
|
||||||
|
@param win_stride Window stride. It must be a multiple of block stride.
|
||||||
|
@param descriptors 2D array of descriptors.
|
||||||
|
@param descr_format Descriptor storage format:
|
||||||
|
- **DESCR_FORMAT_ROW_BY_ROW** - Row-major order.
|
||||||
|
- **DESCR_FORMAT_COL_BY_COL** - Column-major order.
|
||||||
|
|
||||||
|
The function is mainly used to learn the classifier.
|
||||||
|
*/
|
||||||
void getDescriptors(const GpuMat& img, Size win_stride,
|
void getDescriptors(const GpuMat& img, Size win_stride,
|
||||||
GpuMat& descriptors,
|
GpuMat& descriptors,
|
||||||
int descr_format=DESCR_FORMAT_COL_BY_COL);
|
int descr_format=DESCR_FORMAT_COL_BY_COL);
|
||||||
@ -145,20 +232,82 @@ protected:
|
|||||||
|
|
||||||
//////////////////////////// CascadeClassifier ////////////////////////////
|
//////////////////////////// CascadeClassifier ////////////////////////////
|
||||||
|
|
||||||
// The cascade classifier class for object detection: supports old haar and new lbp xlm formats and nvbin for haar cascades olny.
|
/** @brief Cascade classifier class used for object detection. Supports HAAR and LBP cascades. :
|
||||||
|
|
||||||
|
@note
|
||||||
|
- A cascade classifier example can be found at
|
||||||
|
opencv_source_code/samples/gpu/cascadeclassifier.cpp
|
||||||
|
- A Nvidea API specific cascade classifier example can be found at
|
||||||
|
opencv_source_code/samples/gpu/cascadeclassifier_nvidia_api.cpp
|
||||||
|
*/
|
||||||
class CV_EXPORTS CascadeClassifier_CUDA
|
class CV_EXPORTS CascadeClassifier_CUDA
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CascadeClassifier_CUDA();
|
CascadeClassifier_CUDA();
|
||||||
|
/** @brief Loads the classifier from a file. Cascade type is detected automatically by constructor parameter.
|
||||||
|
|
||||||
|
@param filename Name of the file from which the classifier is loaded. Only the old haar classifier
|
||||||
|
(trained by the haar training application) and NVIDIA's nvbin are supported for HAAR and only new
|
||||||
|
type of OpenCV XML cascade supported for LBP.
|
||||||
|
*/
|
||||||
CascadeClassifier_CUDA(const String& filename);
|
CascadeClassifier_CUDA(const String& filename);
|
||||||
~CascadeClassifier_CUDA();
|
~CascadeClassifier_CUDA();
|
||||||
|
|
||||||
|
/** @brief Checks whether the classifier is loaded or not.
|
||||||
|
*/
|
||||||
bool empty() const;
|
bool empty() const;
|
||||||
|
/** @brief Loads the classifier from a file. The previous content is destroyed.
|
||||||
|
|
||||||
|
@param filename Name of the file from which the classifier is loaded. Only the old haar classifier
|
||||||
|
(trained by the haar training application) and NVIDIA's nvbin are supported for HAAR and only new
|
||||||
|
type of OpenCV XML cascade supported for LBP.
|
||||||
|
*/
|
||||||
bool load(const String& filename);
|
bool load(const String& filename);
|
||||||
|
/** @brief Destroys the loaded classifier.
|
||||||
|
*/
|
||||||
void release();
|
void release();
|
||||||
|
|
||||||
/* returns number of detected objects */
|
/** @overload */
|
||||||
int detectMultiScale(const GpuMat& image, GpuMat& objectsBuf, double scaleFactor = 1.2, int minNeighbors = 4, Size minSize = Size());
|
int detectMultiScale(const GpuMat& image, GpuMat& objectsBuf, double scaleFactor = 1.2, int minNeighbors = 4, Size minSize = Size());
|
||||||
|
/** @brief Detects objects of different sizes in the input image.
|
||||||
|
|
||||||
|
@param image Matrix of type CV_8U containing an image where objects should be detected.
|
||||||
|
@param objectsBuf Buffer to store detected objects (rectangles). If it is empty, it is allocated
|
||||||
|
with the default size. If not empty, the function searches not more than N objects, where
|
||||||
|
N = sizeof(objectsBufer's data)/sizeof(cv::Rect).
|
||||||
|
@param maxObjectSize Maximum possible object size. Objects larger than that are ignored. Used for
|
||||||
|
second signature and supported only for LBP cascades.
|
||||||
|
@param scaleFactor Parameter specifying how much the image size is reduced at each image scale.
|
||||||
|
@param minNeighbors Parameter specifying how many neighbors each candidate rectangle should have
|
||||||
|
to retain it.
|
||||||
|
@param minSize Minimum possible object size. Objects smaller than that are ignored.
|
||||||
|
|
||||||
|
The detected objects are returned as a list of rectangles.
|
||||||
|
|
||||||
|
The function returns the number of detected objects, so you can retrieve them as in the following
|
||||||
|
example:
|
||||||
|
@code
|
||||||
|
cuda::CascadeClassifier_CUDA cascade_gpu(...);
|
||||||
|
|
||||||
|
Mat image_cpu = imread(...)
|
||||||
|
GpuMat image_gpu(image_cpu);
|
||||||
|
|
||||||
|
GpuMat objbuf;
|
||||||
|
int detections_number = cascade_gpu.detectMultiScale( image_gpu,
|
||||||
|
objbuf, 1.2, minNeighbors);
|
||||||
|
|
||||||
|
Mat obj_host;
|
||||||
|
// download only detected number of rectangles
|
||||||
|
objbuf.colRange(0, detections_number).download(obj_host);
|
||||||
|
|
||||||
|
Rect* faces = obj_host.ptr<Rect>();
|
||||||
|
for(int i = 0; i < detections_num; ++i)
|
||||||
|
cv::rectangle(image_cpu, faces[i], Scalar(255));
|
||||||
|
|
||||||
|
imshow("Faces", image_cpu);
|
||||||
|
@endcode
|
||||||
|
@sa CascadeClassifier::detectMultiScale
|
||||||
|
*/
|
||||||
int detectMultiScale(const GpuMat& image, GpuMat& objectsBuf, Size maxObjectSize, Size minSize = Size(), double scaleFactor = 1.1, int minNeighbors = 4);
|
int detectMultiScale(const GpuMat& image, GpuMat& objectsBuf, Size maxObjectSize, Size minSize = Size(), double scaleFactor = 1.1, int minNeighbors = 4);
|
||||||
|
|
||||||
bool findLargestObject;
|
bool findLargestObject;
|
||||||
@ -174,8 +323,13 @@ private:
|
|||||||
friend class CascadeClassifier_CUDA_LBP;
|
friend class CascadeClassifier_CUDA_LBP;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} cuda_objdetect
|
||||||
|
|
||||||
//////////////////////////// Labeling ////////////////////////////
|
//////////////////////////// Labeling ////////////////////////////
|
||||||
|
|
||||||
|
//! @addtogroup cuda
|
||||||
|
//! @{
|
||||||
|
|
||||||
//!performs labeling via graph cuts of a 2D regular 4-connected graph.
|
//!performs labeling via graph cuts of a 2D regular 4-connected graph.
|
||||||
CV_EXPORTS void graphcut(GpuMat& terminals, GpuMat& leftTransp, GpuMat& rightTransp, GpuMat& top, GpuMat& bottom, GpuMat& labels,
|
CV_EXPORTS void graphcut(GpuMat& terminals, GpuMat& leftTransp, GpuMat& rightTransp, GpuMat& top, GpuMat& bottom, GpuMat& labels,
|
||||||
GpuMat& buf, Stream& stream = Stream::Null());
|
GpuMat& buf, Stream& stream = Stream::Null());
|
||||||
@ -192,8 +346,13 @@ CV_EXPORTS void connectivityMask(const GpuMat& image, GpuMat& mask, const cv::Sc
|
|||||||
//! performs connected componnents labeling.
|
//! performs connected componnents labeling.
|
||||||
CV_EXPORTS void labelComponents(const GpuMat& mask, GpuMat& components, int flags = 0, Stream& stream = Stream::Null());
|
CV_EXPORTS void labelComponents(const GpuMat& mask, GpuMat& components, int flags = 0, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
//////////////////////////// Calib3d ////////////////////////////
|
//////////////////////////// Calib3d ////////////////////////////
|
||||||
|
|
||||||
|
//! @addtogroup cuda_calib3d
|
||||||
|
//! @{
|
||||||
|
|
||||||
CV_EXPORTS void transformPoints(const GpuMat& src, const Mat& rvec, const Mat& tvec,
|
CV_EXPORTS void transformPoints(const GpuMat& src, const Mat& rvec, const Mat& tvec,
|
||||||
GpuMat& dst, Stream& stream = Stream::Null());
|
GpuMat& dst, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
@ -201,13 +360,34 @@ CV_EXPORTS void projectPoints(const GpuMat& src, const Mat& rvec, const Mat& tve
|
|||||||
const Mat& camera_mat, const Mat& dist_coef, GpuMat& dst,
|
const Mat& camera_mat, const Mat& dist_coef, GpuMat& dst,
|
||||||
Stream& stream = Stream::Null());
|
Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @brief Finds the object pose from 3D-2D point correspondences.
|
||||||
|
|
||||||
|
@param object Single-row matrix of object points.
|
||||||
|
@param image Single-row matrix of image points.
|
||||||
|
@param camera_mat 3x3 matrix of intrinsic camera parameters.
|
||||||
|
@param dist_coef Distortion coefficients. See undistortPoints for details.
|
||||||
|
@param rvec Output 3D rotation vector.
|
||||||
|
@param tvec Output 3D translation vector.
|
||||||
|
@param use_extrinsic_guess Flag to indicate that the function must use rvec and tvec as an
|
||||||
|
initial transformation guess. It is not supported for now.
|
||||||
|
@param num_iters Maximum number of RANSAC iterations.
|
||||||
|
@param max_dist Euclidean distance threshold to detect whether point is inlier or not.
|
||||||
|
@param min_inlier_count Flag to indicate that the function must stop if greater or equal number
|
||||||
|
of inliers is achieved. It is not supported for now.
|
||||||
|
@param inliers Output vector of inlier indices.
|
||||||
|
*/
|
||||||
CV_EXPORTS void solvePnPRansac(const Mat& object, const Mat& image, const Mat& camera_mat,
|
CV_EXPORTS void solvePnPRansac(const Mat& object, const Mat& image, const Mat& camera_mat,
|
||||||
const Mat& dist_coef, Mat& rvec, Mat& tvec, bool use_extrinsic_guess=false,
|
const Mat& dist_coef, Mat& rvec, Mat& tvec, bool use_extrinsic_guess=false,
|
||||||
int num_iters=100, float max_dist=8.0, int min_inlier_count=100,
|
int num_iters=100, float max_dist=8.0, int min_inlier_count=100,
|
||||||
std::vector<int>* inliers=NULL);
|
std::vector<int>* inliers=NULL);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
//////////////////////////// VStab ////////////////////////////
|
//////////////////////////// VStab ////////////////////////////
|
||||||
|
|
||||||
|
//! @addtogroup cuda
|
||||||
|
//! @{
|
||||||
|
|
||||||
//! removes points (CV_32FC2, single row matrix) with zero mask value
|
//! removes points (CV_32FC2, single row matrix) with zero mask value
|
||||||
CV_EXPORTS void compactPoints(GpuMat &points0, GpuMat &points1, const GpuMat &mask);
|
CV_EXPORTS void compactPoints(GpuMat &points0, GpuMat &points1, const GpuMat &mask);
|
||||||
|
|
||||||
@ -215,6 +395,8 @@ CV_EXPORTS void calcWobbleSuppressionMaps(
|
|||||||
int left, int idx, int right, Size size, const Mat &ml, const Mat &mr,
|
int left, int idx, int right, Size size, const Mat &ml, const Mat &mr,
|
||||||
GpuMat &mapx, GpuMat &mapy);
|
GpuMat &mapx, GpuMat &mapy);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDA_HPP__ */
|
#endif /* __OPENCV_CUDA_HPP__ */
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -50,11 +50,33 @@
|
|||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
#include "opencv2/video/background_segm.hpp"
|
#include "opencv2/video/background_segm.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudabgsegm Background Segmentation
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
|
//! @addtogroup cudabgsegm
|
||||||
|
//! @{
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// MOG
|
// MOG
|
||||||
|
|
||||||
|
/** @brief Gaussian Mixture-based Background/Foreground Segmentation Algorithm.
|
||||||
|
|
||||||
|
The class discriminates between foreground and background pixels by building and maintaining a model
|
||||||
|
of the background. Any pixel which does not fit this model is then deemed to be foreground. The
|
||||||
|
class implements algorithm described in @cite MOG2001 .
|
||||||
|
|
||||||
|
@sa BackgroundSubtractorMOG
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example on gaussian mixture based background/foreground segmantation can be found at
|
||||||
|
opencv_source_code/samples/gpu/bgfg_segm.cpp
|
||||||
|
*/
|
||||||
class CV_EXPORTS BackgroundSubtractorMOG : public cv::BackgroundSubtractor
|
class CV_EXPORTS BackgroundSubtractorMOG : public cv::BackgroundSubtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -78,6 +100,14 @@ public:
|
|||||||
virtual void setNoiseSigma(double noiseSigma) = 0;
|
virtual void setNoiseSigma(double noiseSigma) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates mixture-of-gaussian background subtractor
|
||||||
|
|
||||||
|
@param history Length of the history.
|
||||||
|
@param nmixtures Number of Gaussian mixtures.
|
||||||
|
@param backgroundRatio Background ratio.
|
||||||
|
@param noiseSigma Noise strength (standard deviation of the brightness or each color channel). 0
|
||||||
|
means some automatic value.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::BackgroundSubtractorMOG>
|
CV_EXPORTS Ptr<cuda::BackgroundSubtractorMOG>
|
||||||
createBackgroundSubtractorMOG(int history = 200, int nmixtures = 5,
|
createBackgroundSubtractorMOG(int history = 200, int nmixtures = 5,
|
||||||
double backgroundRatio = 0.7, double noiseSigma = 0);
|
double backgroundRatio = 0.7, double noiseSigma = 0);
|
||||||
@ -85,6 +115,14 @@ CV_EXPORTS Ptr<cuda::BackgroundSubtractorMOG>
|
|||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// MOG2
|
// MOG2
|
||||||
|
|
||||||
|
/** @brief Gaussian Mixture-based Background/Foreground Segmentation Algorithm.
|
||||||
|
|
||||||
|
The class discriminates between foreground and background pixels by building and maintaining a model
|
||||||
|
of the background. Any pixel which does not fit this model is then deemed to be foreground. The
|
||||||
|
class implements algorithm described in @cite Zivkovic2004 .
|
||||||
|
|
||||||
|
@sa BackgroundSubtractorMOG2
|
||||||
|
*/
|
||||||
class CV_EXPORTS BackgroundSubtractorMOG2 : public cv::BackgroundSubtractorMOG2
|
class CV_EXPORTS BackgroundSubtractorMOG2 : public cv::BackgroundSubtractorMOG2
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -96,6 +134,15 @@ public:
|
|||||||
virtual void getBackgroundImage(OutputArray backgroundImage, Stream& stream) const = 0;
|
virtual void getBackgroundImage(OutputArray backgroundImage, Stream& stream) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates MOG2 Background Subtractor
|
||||||
|
|
||||||
|
@param history Length of the history.
|
||||||
|
@param varThreshold Threshold on the squared Mahalanobis distance between the pixel and the model
|
||||||
|
to decide whether a pixel is well described by the background model. This parameter does not
|
||||||
|
affect the background update.
|
||||||
|
@param detectShadows If true, the algorithm will detect shadows and mark them. It decreases the
|
||||||
|
speed a bit, so if you do not need this feature, set the parameter to false.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::BackgroundSubtractorMOG2>
|
CV_EXPORTS Ptr<cuda::BackgroundSubtractorMOG2>
|
||||||
createBackgroundSubtractorMOG2(int history = 500, double varThreshold = 16,
|
createBackgroundSubtractorMOG2(int history = 500, double varThreshold = 16,
|
||||||
bool detectShadows = true);
|
bool detectShadows = true);
|
||||||
@ -103,6 +150,12 @@ CV_EXPORTS Ptr<cuda::BackgroundSubtractorMOG2>
|
|||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// GMG
|
// GMG
|
||||||
|
|
||||||
|
/** @brief Background/Foreground Segmentation Algorithm.
|
||||||
|
|
||||||
|
The class discriminates between foreground and background pixels by building and maintaining a model
|
||||||
|
of the background. Any pixel which does not fit this model is then deemed to be foreground. The
|
||||||
|
class implements algorithm described in @cite Gold2012 .
|
||||||
|
*/
|
||||||
class CV_EXPORTS BackgroundSubtractorGMG : public cv::BackgroundSubtractor
|
class CV_EXPORTS BackgroundSubtractorGMG : public cv::BackgroundSubtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -140,54 +193,71 @@ public:
|
|||||||
virtual void setMaxVal(double val) = 0;
|
virtual void setMaxVal(double val) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates GMG Background Subtractor
|
||||||
|
|
||||||
|
@param initializationFrames Number of frames of video to use to initialize histograms.
|
||||||
|
@param decisionThreshold Value above which pixel is determined to be FG.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::BackgroundSubtractorGMG>
|
CV_EXPORTS Ptr<cuda::BackgroundSubtractorGMG>
|
||||||
createBackgroundSubtractorGMG(int initializationFrames = 120, double decisionThreshold = 0.8);
|
createBackgroundSubtractorGMG(int initializationFrames = 120, double decisionThreshold = 0.8);
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// FGD
|
// FGD
|
||||||
|
|
||||||
/**
|
/** @brief The class discriminates between foreground and background pixels by building and maintaining a model
|
||||||
* Foreground Object Detection from Videos Containing Complex Background.
|
of the background.
|
||||||
* Liyuan Li, Weimin Huang, Irene Y.H. Gu, and Qi Tian.
|
|
||||||
* ACM MM2003 9p
|
Any pixel which does not fit this model is then deemed to be foreground. The class implements
|
||||||
|
algorithm described in @cite FGD2003 .
|
||||||
|
@sa BackgroundSubtractor
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS BackgroundSubtractorFGD : public cv::BackgroundSubtractor
|
class CV_EXPORTS BackgroundSubtractorFGD : public cv::BackgroundSubtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Returns the output foreground regions calculated by findContours.
|
||||||
|
|
||||||
|
@param foreground_regions Output array (CPU memory).
|
||||||
|
*/
|
||||||
virtual void getForegroundRegions(OutputArrayOfArrays foreground_regions) = 0;
|
virtual void getForegroundRegions(OutputArrayOfArrays foreground_regions) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CV_EXPORTS FGDParams
|
struct CV_EXPORTS FGDParams
|
||||||
{
|
{
|
||||||
int Lc; // Quantized levels per 'color' component. Power of two, typically 32, 64 or 128.
|
int Lc; //!< Quantized levels per 'color' component. Power of two, typically 32, 64 or 128.
|
||||||
int N1c; // Number of color vectors used to model normal background color variation at a given pixel.
|
int N1c; //!< Number of color vectors used to model normal background color variation at a given pixel.
|
||||||
int N2c; // Number of color vectors retained at given pixel. Must be > N1c, typically ~ 5/3 of N1c.
|
int N2c; //!< Number of color vectors retained at given pixel. Must be > N1c, typically ~ 5/3 of N1c.
|
||||||
// Used to allow the first N1c vectors to adapt over time to changing background.
|
//!< Used to allow the first N1c vectors to adapt over time to changing background.
|
||||||
|
|
||||||
int Lcc; // Quantized levels per 'color co-occurrence' component. Power of two, typically 16, 32 or 64.
|
int Lcc; //!< Quantized levels per 'color co-occurrence' component. Power of two, typically 16, 32 or 64.
|
||||||
int N1cc; // Number of color co-occurrence vectors used to model normal background color variation at a given pixel.
|
int N1cc; //!< Number of color co-occurrence vectors used to model normal background color variation at a given pixel.
|
||||||
int N2cc; // Number of color co-occurrence vectors retained at given pixel. Must be > N1cc, typically ~ 5/3 of N1cc.
|
int N2cc; //!< Number of color co-occurrence vectors retained at given pixel. Must be > N1cc, typically ~ 5/3 of N1cc.
|
||||||
// Used to allow the first N1cc vectors to adapt over time to changing background.
|
//!< Used to allow the first N1cc vectors to adapt over time to changing background.
|
||||||
|
|
||||||
bool is_obj_without_holes; // If TRUE we ignore holes within foreground blobs. Defaults to TRUE.
|
bool is_obj_without_holes; //!< If TRUE we ignore holes within foreground blobs. Defaults to TRUE.
|
||||||
int perform_morphing; // Number of erode-dilate-erode foreground-blob cleanup iterations.
|
int perform_morphing; //!< Number of erode-dilate-erode foreground-blob cleanup iterations.
|
||||||
// These erase one-pixel junk blobs and merge almost-touching blobs. Default value is 1.
|
//!< These erase one-pixel junk blobs and merge almost-touching blobs. Default value is 1.
|
||||||
|
|
||||||
float alpha1; // How quickly we forget old background pixel values seen. Typically set to 0.1.
|
float alpha1; //!< How quickly we forget old background pixel values seen. Typically set to 0.1.
|
||||||
float alpha2; // "Controls speed of feature learning". Depends on T. Typical value circa 0.005.
|
float alpha2; //!< "Controls speed of feature learning". Depends on T. Typical value circa 0.005.
|
||||||
float alpha3; // Alternate to alpha2, used (e.g.) for quicker initial convergence. Typical value 0.1.
|
float alpha3; //!< Alternate to alpha2, used (e.g.) for quicker initial convergence. Typical value 0.1.
|
||||||
|
|
||||||
float delta; // Affects color and color co-occurrence quantization, typically set to 2.
|
float delta; //!< Affects color and color co-occurrence quantization, typically set to 2.
|
||||||
float T; // A percentage value which determines when new features can be recognized as new background. (Typically 0.9).
|
float T; //!< A percentage value which determines when new features can be recognized as new background. (Typically 0.9).
|
||||||
float minArea; // Discard foreground blobs whose bounding box is smaller than this threshold.
|
float minArea; //!< Discard foreground blobs whose bounding box is smaller than this threshold.
|
||||||
|
|
||||||
// default Params
|
//! default Params
|
||||||
FGDParams();
|
FGDParams();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates FGD Background Subtractor
|
||||||
|
|
||||||
|
@param params Algorithm's parameters. See @cite FGD2003 for explanation.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::BackgroundSubtractorFGD>
|
CV_EXPORTS Ptr<cuda::BackgroundSubtractorFGD>
|
||||||
createBackgroundSubtractorFGD(const FGDParams& params = FGDParams());
|
createBackgroundSubtractorFGD(const FGDParams& params = FGDParams());
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDABGSEGM_HPP__ */
|
#endif /* __OPENCV_CUDABGSEGM_HPP__ */
|
||||||
|
@ -50,8 +50,18 @@
|
|||||||
|
|
||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudacodec Video Encoding/Decoding
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cudacodec {
|
namespace cv { namespace cudacodec {
|
||||||
|
|
||||||
|
//! @addtogroup cudacodec
|
||||||
|
//! @{
|
||||||
|
|
||||||
////////////////////////////////// Video Encoding //////////////////////////////////
|
////////////////////////////////// Video Encoding //////////////////////////////////
|
||||||
|
|
||||||
// Works only under Windows.
|
// Works only under Windows.
|
||||||
@ -68,35 +78,53 @@ enum SurfaceFormat
|
|||||||
SF_GRAY = SF_BGR
|
SF_GRAY = SF_BGR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Different parameters for CUDA video encoder.
|
||||||
|
*/
|
||||||
struct CV_EXPORTS EncoderParams
|
struct CV_EXPORTS EncoderParams
|
||||||
{
|
{
|
||||||
int P_Interval; // NVVE_P_INTERVAL,
|
int P_Interval; //!< NVVE_P_INTERVAL,
|
||||||
int IDR_Period; // NVVE_IDR_PERIOD,
|
int IDR_Period; //!< NVVE_IDR_PERIOD,
|
||||||
int DynamicGOP; // NVVE_DYNAMIC_GOP,
|
int DynamicGOP; //!< NVVE_DYNAMIC_GOP,
|
||||||
int RCType; // NVVE_RC_TYPE,
|
int RCType; //!< NVVE_RC_TYPE,
|
||||||
int AvgBitrate; // NVVE_AVG_BITRATE,
|
int AvgBitrate; //!< NVVE_AVG_BITRATE,
|
||||||
int PeakBitrate; // NVVE_PEAK_BITRATE,
|
int PeakBitrate; //!< NVVE_PEAK_BITRATE,
|
||||||
int QP_Level_Intra; // NVVE_QP_LEVEL_INTRA,
|
int QP_Level_Intra; //!< NVVE_QP_LEVEL_INTRA,
|
||||||
int QP_Level_InterP; // NVVE_QP_LEVEL_INTER_P,
|
int QP_Level_InterP; //!< NVVE_QP_LEVEL_INTER_P,
|
||||||
int QP_Level_InterB; // NVVE_QP_LEVEL_INTER_B,
|
int QP_Level_InterB; //!< NVVE_QP_LEVEL_INTER_B,
|
||||||
int DeblockMode; // NVVE_DEBLOCK_MODE,
|
int DeblockMode; //!< NVVE_DEBLOCK_MODE,
|
||||||
int ProfileLevel; // NVVE_PROFILE_LEVEL,
|
int ProfileLevel; //!< NVVE_PROFILE_LEVEL,
|
||||||
int ForceIntra; // NVVE_FORCE_INTRA,
|
int ForceIntra; //!< NVVE_FORCE_INTRA,
|
||||||
int ForceIDR; // NVVE_FORCE_IDR,
|
int ForceIDR; //!< NVVE_FORCE_IDR,
|
||||||
int ClearStat; // NVVE_CLEAR_STAT,
|
int ClearStat; //!< NVVE_CLEAR_STAT,
|
||||||
int DIMode; // NVVE_SET_DEINTERLACE,
|
int DIMode; //!< NVVE_SET_DEINTERLACE,
|
||||||
int Presets; // NVVE_PRESETS,
|
int Presets; //!< NVVE_PRESETS,
|
||||||
int DisableCabac; // NVVE_DISABLE_CABAC,
|
int DisableCabac; //!< NVVE_DISABLE_CABAC,
|
||||||
int NaluFramingType; // NVVE_CONFIGURE_NALU_FRAMING_TYPE
|
int NaluFramingType; //!< NVVE_CONFIGURE_NALU_FRAMING_TYPE
|
||||||
int DisableSPSPPS; // NVVE_DISABLE_SPS_PPS
|
int DisableSPSPPS; //!< NVVE_DISABLE_SPS_PPS
|
||||||
|
|
||||||
EncoderParams();
|
EncoderParams();
|
||||||
|
/** @brief Constructors.
|
||||||
|
|
||||||
|
@param configFile Config file name.
|
||||||
|
|
||||||
|
Creates default parameters or reads parameters from config file.
|
||||||
|
*/
|
||||||
explicit EncoderParams(const String& configFile);
|
explicit EncoderParams(const String& configFile);
|
||||||
|
|
||||||
|
/** @brief Reads parameters from config file.
|
||||||
|
|
||||||
|
@param configFile Config file name.
|
||||||
|
*/
|
||||||
void load(const String& configFile);
|
void load(const String& configFile);
|
||||||
|
/** @brief Saves parameters to config file.
|
||||||
|
|
||||||
|
@param configFile Config file name.
|
||||||
|
*/
|
||||||
void save(const String& configFile) const;
|
void save(const String& configFile) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Callbacks for CUDA video encoder.
|
||||||
|
*/
|
||||||
class CV_EXPORTS EncoderCallBack
|
class CV_EXPORTS EncoderCallBack
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -109,41 +137,109 @@ public:
|
|||||||
|
|
||||||
virtual ~EncoderCallBack() {}
|
virtual ~EncoderCallBack() {}
|
||||||
|
|
||||||
//! callback function to signal the start of bitstream that is to be encoded
|
/** @brief Callback function to signal the start of bitstream that is to be encoded.
|
||||||
//! callback must allocate host buffer for CUDA encoder and return pointer to it and it's size
|
|
||||||
|
Callback must allocate buffer for CUDA encoder and return pointer to it and it's size.
|
||||||
|
*/
|
||||||
virtual uchar* acquireBitStream(int* bufferSize) = 0;
|
virtual uchar* acquireBitStream(int* bufferSize) = 0;
|
||||||
|
|
||||||
//! callback function to signal that the encoded bitstream is ready to be written to file
|
/** @brief Callback function to signal that the encoded bitstream is ready to be written to file.
|
||||||
|
*/
|
||||||
virtual void releaseBitStream(unsigned char* data, int size) = 0;
|
virtual void releaseBitStream(unsigned char* data, int size) = 0;
|
||||||
|
|
||||||
//! callback function to signal that the encoding operation on the frame has started
|
/** @brief Callback function to signal that the encoding operation on the frame has started.
|
||||||
|
|
||||||
|
@param frameNumber
|
||||||
|
@param picType Specify frame type (I-Frame, P-Frame or B-Frame).
|
||||||
|
*/
|
||||||
virtual void onBeginFrame(int frameNumber, PicType picType) = 0;
|
virtual void onBeginFrame(int frameNumber, PicType picType) = 0;
|
||||||
|
|
||||||
//! callback function signals that the encoding operation on the frame has finished
|
/** @brief Callback function signals that the encoding operation on the frame has finished.
|
||||||
|
|
||||||
|
@param frameNumber
|
||||||
|
@param picType Specify frame type (I-Frame, P-Frame or B-Frame).
|
||||||
|
*/
|
||||||
virtual void onEndFrame(int frameNumber, PicType picType) = 0;
|
virtual void onEndFrame(int frameNumber, PicType picType) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Video writer interface.
|
||||||
|
|
||||||
|
The implementation uses H264 video codec.
|
||||||
|
|
||||||
|
@note Currently only Windows platform is supported.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example on how to use the videoWriter class can be found at
|
||||||
|
opencv_source_code/samples/gpu/video_writer.cpp
|
||||||
|
*/
|
||||||
class CV_EXPORTS VideoWriter
|
class CV_EXPORTS VideoWriter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~VideoWriter() {}
|
virtual ~VideoWriter() {}
|
||||||
|
|
||||||
//! writes the next frame from GPU memory
|
/** @brief Writes the next video frame.
|
||||||
|
|
||||||
|
@param frame The written frame.
|
||||||
|
@param lastFrame Indicates that it is end of stream. The parameter can be ignored.
|
||||||
|
|
||||||
|
The method write the specified image to video file. The image must have the same size and the same
|
||||||
|
surface format as has been specified when opening the video writer.
|
||||||
|
*/
|
||||||
virtual void write(InputArray frame, bool lastFrame = false) = 0;
|
virtual void write(InputArray frame, bool lastFrame = false) = 0;
|
||||||
|
|
||||||
virtual EncoderParams getEncoderParams() const = 0;
|
virtual EncoderParams getEncoderParams() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! create VideoWriter for specified output file (only AVI file format is supported)
|
/** @brief Creates video writer.
|
||||||
|
|
||||||
|
@param fileName Name of the output video file. Only AVI file format is supported.
|
||||||
|
@param frameSize Size of the input video frames.
|
||||||
|
@param fps Framerate of the created video stream.
|
||||||
|
@param format Surface format of input frames ( SF_UYVY , SF_YUY2 , SF_YV12 , SF_NV12 ,
|
||||||
|
SF_IYUV , SF_BGR or SF_GRAY). BGR or gray frames will be converted to YV12 format before
|
||||||
|
encoding, frames with other formats will be used as is.
|
||||||
|
|
||||||
|
The constructors initialize video writer. FFMPEG is used to write videos. User can implement own
|
||||||
|
multiplexing with cudacodec::EncoderCallBack .
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const String& fileName, Size frameSize, double fps, SurfaceFormat format = SF_BGR);
|
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const String& fileName, Size frameSize, double fps, SurfaceFormat format = SF_BGR);
|
||||||
|
/** @overload
|
||||||
|
@param fileName Name of the output video file. Only AVI file format is supported.
|
||||||
|
@param frameSize Size of the input video frames.
|
||||||
|
@param fps Framerate of the created video stream.
|
||||||
|
@param params Encoder parameters. See cudacodec::EncoderParams .
|
||||||
|
@param format Surface format of input frames ( SF_UYVY , SF_YUY2 , SF_YV12 , SF_NV12 ,
|
||||||
|
SF_IYUV , SF_BGR or SF_GRAY). BGR or gray frames will be converted to YV12 format before
|
||||||
|
encoding, frames with other formats will be used as is.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const String& fileName, Size frameSize, double fps, const EncoderParams& params, SurfaceFormat format = SF_BGR);
|
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const String& fileName, Size frameSize, double fps, const EncoderParams& params, SurfaceFormat format = SF_BGR);
|
||||||
|
|
||||||
//! create VideoWriter for user-defined callbacks
|
/** @overload
|
||||||
|
@param encoderCallback Callbacks for video encoder. See cudacodec::EncoderCallBack . Use it if you
|
||||||
|
want to work with raw video stream.
|
||||||
|
@param frameSize Size of the input video frames.
|
||||||
|
@param fps Framerate of the created video stream.
|
||||||
|
@param format Surface format of input frames ( SF_UYVY , SF_YUY2 , SF_YV12 , SF_NV12 ,
|
||||||
|
SF_IYUV , SF_BGR or SF_GRAY). BGR or gray frames will be converted to YV12 format before
|
||||||
|
encoding, frames with other formats will be used as is.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const Ptr<EncoderCallBack>& encoderCallback, Size frameSize, double fps, SurfaceFormat format = SF_BGR);
|
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const Ptr<EncoderCallBack>& encoderCallback, Size frameSize, double fps, SurfaceFormat format = SF_BGR);
|
||||||
|
/** @overload
|
||||||
|
@param encoderCallback Callbacks for video encoder. See cudacodec::EncoderCallBack . Use it if you
|
||||||
|
want to work with raw video stream.
|
||||||
|
@param frameSize Size of the input video frames.
|
||||||
|
@param fps Framerate of the created video stream.
|
||||||
|
@param params Encoder parameters. See cudacodec::EncoderParams .
|
||||||
|
@param format Surface format of input frames ( SF_UYVY , SF_YUY2 , SF_YV12 , SF_NV12 ,
|
||||||
|
SF_IYUV , SF_BGR or SF_GRAY). BGR or gray frames will be converted to YV12 format before
|
||||||
|
encoding, frames with other formats will be used as is.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const Ptr<EncoderCallBack>& encoderCallback, Size frameSize, double fps, const EncoderParams& params, SurfaceFormat format = SF_BGR);
|
CV_EXPORTS Ptr<VideoWriter> createVideoWriter(const Ptr<EncoderCallBack>& encoderCallback, Size frameSize, double fps, const EncoderParams& params, SurfaceFormat format = SF_BGR);
|
||||||
|
|
||||||
////////////////////////////////// Video Decoding //////////////////////////////////////////
|
////////////////////////////////// Video Decoding //////////////////////////////////////////
|
||||||
|
|
||||||
|
/** @brief Video codecs supported by cudacodec::VideoReader .
|
||||||
|
*/
|
||||||
enum Codec
|
enum Codec
|
||||||
{
|
{
|
||||||
MPEG1 = 0,
|
MPEG1 = 0,
|
||||||
@ -155,13 +251,15 @@ enum Codec
|
|||||||
H264_SVC,
|
H264_SVC,
|
||||||
H264_MVC,
|
H264_MVC,
|
||||||
|
|
||||||
Uncompressed_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), // Y,U,V (4:2:0)
|
Uncompressed_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), //!< Y,U,V (4:2:0)
|
||||||
Uncompressed_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,V,U (4:2:0)
|
Uncompressed_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')), //!< Y,V,U (4:2:0)
|
||||||
Uncompressed_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,UV (4:2:0)
|
Uncompressed_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')), //!< Y,UV (4:2:0)
|
||||||
Uncompressed_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')), // YUYV/YUY2 (4:2:2)
|
Uncompressed_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')), //!< YUYV/YUY2 (4:2:2)
|
||||||
Uncompressed_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')) // UYVY (4:2:2)
|
Uncompressed_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')) //!< UYVY (4:2:2)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Chroma formats supported by cudacodec::VideoReader .
|
||||||
|
*/
|
||||||
enum ChromaFormat
|
enum ChromaFormat
|
||||||
{
|
{
|
||||||
Monochrome = 0,
|
Monochrome = 0,
|
||||||
@ -170,6 +268,8 @@ enum ChromaFormat
|
|||||||
YUV444
|
YUV444
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Struct providing information about video file format. :
|
||||||
|
*/
|
||||||
struct FormatInfo
|
struct FormatInfo
|
||||||
{
|
{
|
||||||
Codec codec;
|
Codec codec;
|
||||||
@ -178,29 +278,65 @@ struct FormatInfo
|
|||||||
int height;
|
int height;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Video reader interface.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example on how to use the videoReader class can be found at
|
||||||
|
opencv_source_code/samples/gpu/video_reader.cpp
|
||||||
|
*/
|
||||||
class CV_EXPORTS VideoReader
|
class CV_EXPORTS VideoReader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~VideoReader() {}
|
virtual ~VideoReader() {}
|
||||||
|
|
||||||
|
/** @brief Grabs, decodes and returns the next video frame.
|
||||||
|
|
||||||
|
If no frames has been grabbed (there are no more frames in video file), the methods return false .
|
||||||
|
The method throws Exception if error occurs.
|
||||||
|
*/
|
||||||
virtual bool nextFrame(OutputArray frame) = 0;
|
virtual bool nextFrame(OutputArray frame) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns information about video file format.
|
||||||
|
*/
|
||||||
virtual FormatInfo format() const = 0;
|
virtual FormatInfo format() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Interface for video demultiplexing. :
|
||||||
|
|
||||||
|
User can implement own demultiplexing by implementing this interface.
|
||||||
|
*/
|
||||||
class CV_EXPORTS RawVideoSource
|
class CV_EXPORTS RawVideoSource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~RawVideoSource() {}
|
virtual ~RawVideoSource() {}
|
||||||
|
|
||||||
|
/** @brief Returns next packet with RAW video frame.
|
||||||
|
|
||||||
|
@param data Pointer to frame data.
|
||||||
|
@param size Size in bytes of current frame.
|
||||||
|
@param endOfFile Indicates that it is end of stream.
|
||||||
|
*/
|
||||||
virtual bool getNextPacket(unsigned char** data, int* size, bool* endOfFile) = 0;
|
virtual bool getNextPacket(unsigned char** data, int* size, bool* endOfFile) = 0;
|
||||||
|
|
||||||
|
/** @brief Returns information about video file format.
|
||||||
|
*/
|
||||||
virtual FormatInfo format() const = 0;
|
virtual FormatInfo format() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates video reader.
|
||||||
|
|
||||||
|
@param filename Name of the input video file.
|
||||||
|
|
||||||
|
FFMPEG is used to read videos. User can implement own demultiplexing with cudacodec::RawVideoSource
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<VideoReader> createVideoReader(const String& filename);
|
CV_EXPORTS Ptr<VideoReader> createVideoReader(const String& filename);
|
||||||
|
/** @overload
|
||||||
|
@param source RAW video source implemented by user.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<VideoReader> createVideoReader(const Ptr<RawVideoSource>& source);
|
CV_EXPORTS Ptr<VideoReader> createVideoReader(const Ptr<RawVideoSource>& source);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cudacodec {
|
}} // namespace cv { namespace cudacodec {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDACODEC_HPP__ */
|
#endif /* __OPENCV_CUDACODEC_HPP__ */
|
||||||
|
@ -50,150 +50,175 @@
|
|||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
#include "opencv2/cudafilters.hpp"
|
#include "opencv2/cudafilters.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudafeatures2d Feature Detection and Description
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
|
//! @addtogroup cudafeatures2d
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Brute-force descriptor matcher.
|
||||||
|
|
||||||
|
For each descriptor in the first set, this matcher finds the closest descriptor in the second set
|
||||||
|
by trying each one. This descriptor matcher supports masking permissible matches between descriptor
|
||||||
|
sets.
|
||||||
|
|
||||||
|
The class BFMatcher_CUDA has an interface similar to the class DescriptorMatcher. It has two groups
|
||||||
|
of match methods: for matching descriptors of one image with another image or with an image set.
|
||||||
|
Also, all functions have an alternative to save results either to the GPU memory or to the CPU
|
||||||
|
memory.
|
||||||
|
|
||||||
|
@sa DescriptorMatcher, BFMatcher
|
||||||
|
*/
|
||||||
class CV_EXPORTS BFMatcher_CUDA
|
class CV_EXPORTS BFMatcher_CUDA
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit BFMatcher_CUDA(int norm = cv::NORM_L2);
|
explicit BFMatcher_CUDA(int norm = cv::NORM_L2);
|
||||||
|
|
||||||
// Add descriptors to train descriptor collection
|
//! Add descriptors to train descriptor collection
|
||||||
void add(const std::vector<GpuMat>& descCollection);
|
void add(const std::vector<GpuMat>& descCollection);
|
||||||
|
|
||||||
// Get train descriptors collection
|
//! Get train descriptors collection
|
||||||
const std::vector<GpuMat>& getTrainDescriptors() const;
|
const std::vector<GpuMat>& getTrainDescriptors() const;
|
||||||
|
|
||||||
// Clear train descriptors collection
|
//! Clear train descriptors collection
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
// Return true if there are not train descriptors in collection
|
//! Return true if there are not train descriptors in collection
|
||||||
bool empty() const;
|
bool empty() const;
|
||||||
|
|
||||||
// Return true if the matcher supports mask in match methods
|
//! Return true if the matcher supports mask in match methods
|
||||||
bool isMaskSupported() const;
|
bool isMaskSupported() const;
|
||||||
|
|
||||||
// Find one best match for each query descriptor
|
//! Find one best match for each query descriptor
|
||||||
void matchSingle(const GpuMat& query, const GpuMat& train,
|
void matchSingle(const GpuMat& query, const GpuMat& train,
|
||||||
GpuMat& trainIdx, GpuMat& distance,
|
GpuMat& trainIdx, GpuMat& distance,
|
||||||
const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
|
const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
// Download trainIdx and distance and convert it to CPU vector with DMatch
|
//! Download trainIdx and distance and convert it to CPU vector with DMatch
|
||||||
static void matchDownload(const GpuMat& trainIdx, const GpuMat& distance, std::vector<DMatch>& matches);
|
static void matchDownload(const GpuMat& trainIdx, const GpuMat& distance, std::vector<DMatch>& matches);
|
||||||
// Convert trainIdx and distance to vector with DMatch
|
//! Convert trainIdx and distance to vector with DMatch
|
||||||
static void matchConvert(const Mat& trainIdx, const Mat& distance, std::vector<DMatch>& matches);
|
static void matchConvert(const Mat& trainIdx, const Mat& distance, std::vector<DMatch>& matches);
|
||||||
|
|
||||||
// Find one best match for each query descriptor
|
//! Find one best match for each query descriptor
|
||||||
void match(const GpuMat& query, const GpuMat& train, std::vector<DMatch>& matches, const GpuMat& mask = GpuMat());
|
void match(const GpuMat& query, const GpuMat& train, std::vector<DMatch>& matches, const GpuMat& mask = GpuMat());
|
||||||
|
|
||||||
// Make gpu collection of trains and masks in suitable format for matchCollection function
|
//! Make gpu collection of trains and masks in suitable format for matchCollection function
|
||||||
void makeGpuCollection(GpuMat& trainCollection, GpuMat& maskCollection, const std::vector<GpuMat>& masks = std::vector<GpuMat>());
|
void makeGpuCollection(GpuMat& trainCollection, GpuMat& maskCollection, const std::vector<GpuMat>& masks = std::vector<GpuMat>());
|
||||||
|
|
||||||
// Find one best match from train collection for each query descriptor
|
//! Find one best match from train collection for each query descriptor
|
||||||
void matchCollection(const GpuMat& query, const GpuMat& trainCollection,
|
void matchCollection(const GpuMat& query, const GpuMat& trainCollection,
|
||||||
GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance,
|
GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance,
|
||||||
const GpuMat& masks = GpuMat(), Stream& stream = Stream::Null());
|
const GpuMat& masks = GpuMat(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
// Download trainIdx, imgIdx and distance and convert it to vector with DMatch
|
//! Download trainIdx, imgIdx and distance and convert it to vector with DMatch
|
||||||
static void matchDownload(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, std::vector<DMatch>& matches);
|
static void matchDownload(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, std::vector<DMatch>& matches);
|
||||||
// Convert trainIdx, imgIdx and distance to vector with DMatch
|
//! Convert trainIdx, imgIdx and distance to vector with DMatch
|
||||||
static void matchConvert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, std::vector<DMatch>& matches);
|
static void matchConvert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, std::vector<DMatch>& matches);
|
||||||
|
|
||||||
// Find one best match from train collection for each query descriptor.
|
//! Find one best match from train collection for each query descriptor.
|
||||||
void match(const GpuMat& query, std::vector<DMatch>& matches, const std::vector<GpuMat>& masks = std::vector<GpuMat>());
|
void match(const GpuMat& query, std::vector<DMatch>& matches, const std::vector<GpuMat>& masks = std::vector<GpuMat>());
|
||||||
|
|
||||||
// Find k best matches for each query descriptor (in increasing order of distances)
|
//! Find k best matches for each query descriptor (in increasing order of distances)
|
||||||
void knnMatchSingle(const GpuMat& query, const GpuMat& train,
|
void knnMatchSingle(const GpuMat& query, const GpuMat& train,
|
||||||
GpuMat& trainIdx, GpuMat& distance, GpuMat& allDist, int k,
|
GpuMat& trainIdx, GpuMat& distance, GpuMat& allDist, int k,
|
||||||
const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
|
const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
// Download trainIdx and distance and convert it to vector with DMatch
|
//! Download trainIdx and distance and convert it to vector with DMatch
|
||||||
// compactResult is used when mask is not empty. If compactResult is false matches
|
//! compactResult is used when mask is not empty. If compactResult is false matches
|
||||||
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
//! vector will have the same size as queryDescriptors rows. If compactResult is true
|
||||||
// matches vector will not contain matches for fully masked out query descriptors.
|
//! matches vector will not contain matches for fully masked out query descriptors.
|
||||||
static void knnMatchDownload(const GpuMat& trainIdx, const GpuMat& distance,
|
static void knnMatchDownload(const GpuMat& trainIdx, const GpuMat& distance,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
// Convert trainIdx and distance to vector with DMatch
|
//! Convert trainIdx and distance to vector with DMatch
|
||||||
static void knnMatchConvert(const Mat& trainIdx, const Mat& distance,
|
static void knnMatchConvert(const Mat& trainIdx, const Mat& distance,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
|
|
||||||
// Find k best matches for each query descriptor (in increasing order of distances).
|
//! Find k best matches for each query descriptor (in increasing order of distances).
|
||||||
// compactResult is used when mask is not empty. If compactResult is false matches
|
//! compactResult is used when mask is not empty. If compactResult is false matches
|
||||||
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
//! vector will have the same size as queryDescriptors rows. If compactResult is true
|
||||||
// matches vector will not contain matches for fully masked out query descriptors.
|
//! matches vector will not contain matches for fully masked out query descriptors.
|
||||||
void knnMatch(const GpuMat& query, const GpuMat& train,
|
void knnMatch(const GpuMat& query, const GpuMat& train,
|
||||||
std::vector< std::vector<DMatch> >& matches, int k, const GpuMat& mask = GpuMat(),
|
std::vector< std::vector<DMatch> >& matches, int k, const GpuMat& mask = GpuMat(),
|
||||||
bool compactResult = false);
|
bool compactResult = false);
|
||||||
|
|
||||||
// Find k best matches from train collection for each query descriptor (in increasing order of distances)
|
//! Find k best matches from train collection for each query descriptor (in increasing order of distances)
|
||||||
void knnMatch2Collection(const GpuMat& query, const GpuMat& trainCollection,
|
void knnMatch2Collection(const GpuMat& query, const GpuMat& trainCollection,
|
||||||
GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance,
|
GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance,
|
||||||
const GpuMat& maskCollection = GpuMat(), Stream& stream = Stream::Null());
|
const GpuMat& maskCollection = GpuMat(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
// Download trainIdx and distance and convert it to vector with DMatch
|
//! Download trainIdx and distance and convert it to vector with DMatch
|
||||||
// compactResult is used when mask is not empty. If compactResult is false matches
|
//! compactResult is used when mask is not empty. If compactResult is false matches
|
||||||
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
//! vector will have the same size as queryDescriptors rows. If compactResult is true
|
||||||
// matches vector will not contain matches for fully masked out query descriptors.
|
//! matches vector will not contain matches for fully masked out query descriptors.
|
||||||
|
//! @see BFMatcher_CUDA::knnMatchDownload
|
||||||
static void knnMatch2Download(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance,
|
static void knnMatch2Download(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
// Convert trainIdx and distance to vector with DMatch
|
//! Convert trainIdx and distance to vector with DMatch
|
||||||
|
//! @see BFMatcher_CUDA::knnMatchConvert
|
||||||
static void knnMatch2Convert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance,
|
static void knnMatch2Convert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
|
|
||||||
// Find k best matches for each query descriptor (in increasing order of distances).
|
//! Find k best matches for each query descriptor (in increasing order of distances).
|
||||||
// compactResult is used when mask is not empty. If compactResult is false matches
|
//! compactResult is used when mask is not empty. If compactResult is false matches
|
||||||
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
//! vector will have the same size as queryDescriptors rows. If compactResult is true
|
||||||
// matches vector will not contain matches for fully masked out query descriptors.
|
//! matches vector will not contain matches for fully masked out query descriptors.
|
||||||
void knnMatch(const GpuMat& query, std::vector< std::vector<DMatch> >& matches, int k,
|
void knnMatch(const GpuMat& query, std::vector< std::vector<DMatch> >& matches, int k,
|
||||||
const std::vector<GpuMat>& masks = std::vector<GpuMat>(), bool compactResult = false);
|
const std::vector<GpuMat>& masks = std::vector<GpuMat>(), bool compactResult = false);
|
||||||
|
|
||||||
// Find best matches for each query descriptor which have distance less than maxDistance.
|
//! Find best matches for each query descriptor which have distance less than maxDistance.
|
||||||
// nMatches.at<int>(0, queryIdx) will contain matches count for queryIdx.
|
//! nMatches.at<int>(0, queryIdx) will contain matches count for queryIdx.
|
||||||
// carefully nMatches can be greater than trainIdx.cols - it means that matcher didn't find all matches,
|
//! carefully nMatches can be greater than trainIdx.cols - it means that matcher didn't find all matches,
|
||||||
// because it didn't have enough memory.
|
//! because it didn't have enough memory.
|
||||||
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nTrain / 100), 10),
|
//! If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nTrain / 100), 10),
|
||||||
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
//! otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
||||||
// Matches doesn't sorted.
|
//! Matches doesn't sorted.
|
||||||
void radiusMatchSingle(const GpuMat& query, const GpuMat& train,
|
void radiusMatchSingle(const GpuMat& query, const GpuMat& train,
|
||||||
GpuMat& trainIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance,
|
GpuMat& trainIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance,
|
||||||
const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
|
const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
// Download trainIdx, nMatches and distance and convert it to vector with DMatch.
|
//! Download trainIdx, nMatches and distance and convert it to vector with DMatch.
|
||||||
// matches will be sorted in increasing order of distances.
|
//! matches will be sorted in increasing order of distances.
|
||||||
// compactResult is used when mask is not empty. If compactResult is false matches
|
//! compactResult is used when mask is not empty. If compactResult is false matches
|
||||||
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
//! vector will have the same size as queryDescriptors rows. If compactResult is true
|
||||||
// matches vector will not contain matches for fully masked out query descriptors.
|
//! matches vector will not contain matches for fully masked out query descriptors.
|
||||||
static void radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& distance, const GpuMat& nMatches,
|
static void radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& distance, const GpuMat& nMatches,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
// Convert trainIdx, nMatches and distance to vector with DMatch.
|
//! Convert trainIdx, nMatches and distance to vector with DMatch.
|
||||||
static void radiusMatchConvert(const Mat& trainIdx, const Mat& distance, const Mat& nMatches,
|
static void radiusMatchConvert(const Mat& trainIdx, const Mat& distance, const Mat& nMatches,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
|
|
||||||
// Find best matches for each query descriptor which have distance less than maxDistance
|
//! Find best matches for each query descriptor which have distance less than maxDistance
|
||||||
// in increasing order of distances).
|
//! in increasing order of distances).
|
||||||
void radiusMatch(const GpuMat& query, const GpuMat& train,
|
void radiusMatch(const GpuMat& query, const GpuMat& train,
|
||||||
std::vector< std::vector<DMatch> >& matches, float maxDistance,
|
std::vector< std::vector<DMatch> >& matches, float maxDistance,
|
||||||
const GpuMat& mask = GpuMat(), bool compactResult = false);
|
const GpuMat& mask = GpuMat(), bool compactResult = false);
|
||||||
|
|
||||||
// Find best matches for each query descriptor which have distance less than maxDistance.
|
//! Find best matches for each query descriptor which have distance less than maxDistance.
|
||||||
// If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nQuery / 100), 10),
|
//! If trainIdx is empty, then trainIdx and distance will be created with size nQuery x max((nQuery / 100), 10),
|
||||||
// otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
//! otherwize user can pass own allocated trainIdx and distance with size nQuery x nMaxMatches
|
||||||
// Matches doesn't sorted.
|
//! Matches doesn't sorted.
|
||||||
void radiusMatchCollection(const GpuMat& query, GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance,
|
void radiusMatchCollection(const GpuMat& query, GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance,
|
||||||
const std::vector<GpuMat>& masks = std::vector<GpuMat>(), Stream& stream = Stream::Null());
|
const std::vector<GpuMat>& masks = std::vector<GpuMat>(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
// Download trainIdx, imgIdx, nMatches and distance and convert it to vector with DMatch.
|
//! Download trainIdx, imgIdx, nMatches and distance and convert it to vector with DMatch.
|
||||||
// matches will be sorted in increasing order of distances.
|
//! matches will be sorted in increasing order of distances.
|
||||||
// compactResult is used when mask is not empty. If compactResult is false matches
|
//! compactResult is used when mask is not empty. If compactResult is false matches
|
||||||
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
//! vector will have the same size as queryDescriptors rows. If compactResult is true
|
||||||
// matches vector will not contain matches for fully masked out query descriptors.
|
//! matches vector will not contain matches for fully masked out query descriptors.
|
||||||
static void radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, const GpuMat& nMatches,
|
static void radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, const GpuMat& nMatches,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
// Convert trainIdx, nMatches and distance to vector with DMatch.
|
//! Convert trainIdx, nMatches and distance to vector with DMatch.
|
||||||
static void radiusMatchConvert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, const Mat& nMatches,
|
static void radiusMatchConvert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, const Mat& nMatches,
|
||||||
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
|
||||||
|
|
||||||
// Find best matches from train collection for each query descriptor which have distance less than
|
//! Find best matches from train collection for each query descriptor which have distance less than
|
||||||
// maxDistance (in increasing order of distances).
|
//! maxDistance (in increasing order of distances).
|
||||||
void radiusMatch(const GpuMat& query, std::vector< std::vector<DMatch> >& matches, float maxDistance,
|
void radiusMatch(const GpuMat& query, std::vector< std::vector<DMatch> >& matches, float maxDistance,
|
||||||
const std::vector<GpuMat>& masks = std::vector<GpuMat>(), bool compactResult = false);
|
const std::vector<GpuMat>& masks = std::vector<GpuMat>(), bool compactResult = false);
|
||||||
|
|
||||||
@ -203,6 +228,8 @@ private:
|
|||||||
std::vector<GpuMat> trainDescCollection;
|
std::vector<GpuMat> trainDescCollection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Class used for corner detection using the FAST algorithm. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS FAST_CUDA
|
class CV_EXPORTS FAST_CUDA
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -213,23 +240,45 @@ public:
|
|||||||
ROWS_COUNT
|
ROWS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
// all features have same size
|
//! all features have same size
|
||||||
static const int FEATURE_SIZE = 7;
|
static const int FEATURE_SIZE = 7;
|
||||||
|
|
||||||
|
/** @brief Constructor.
|
||||||
|
|
||||||
|
@param threshold Threshold on difference between intensity of the central pixel and pixels on a
|
||||||
|
circle around this pixel.
|
||||||
|
@param nonmaxSuppression If it is true, non-maximum suppression is applied to detected corners
|
||||||
|
(keypoints).
|
||||||
|
@param keypointsRatio Inner buffer size for keypoints store is determined as (keypointsRatio \*
|
||||||
|
image_width \* image_height).
|
||||||
|
*/
|
||||||
explicit FAST_CUDA(int threshold, bool nonmaxSuppression = true, double keypointsRatio = 0.05);
|
explicit FAST_CUDA(int threshold, bool nonmaxSuppression = true, double keypointsRatio = 0.05);
|
||||||
|
|
||||||
//! finds the keypoints using FAST detector
|
/** @brief Finds the keypoints using FAST detector.
|
||||||
//! supports only CV_8UC1 images
|
|
||||||
|
@param image Image where keypoints (corners) are detected. Only 8-bit grayscale images are
|
||||||
|
supported.
|
||||||
|
@param mask Optional input mask that marks the regions where we should detect features.
|
||||||
|
@param keypoints The output vector of keypoints. Can be stored both in CPU and GPU memory. For GPU
|
||||||
|
memory:
|
||||||
|
- keypoints.ptr\<Vec2s\>(LOCATION_ROW)[i] will contain location of i'th point
|
||||||
|
- keypoints.ptr\<float\>(RESPONSE_ROW)[i] will contain response of i'th point (if non-maximum
|
||||||
|
suppression is applied)
|
||||||
|
*/
|
||||||
void operator ()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints);
|
void operator ()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints);
|
||||||
|
/** @overload */
|
||||||
void operator ()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints);
|
void operator ()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints);
|
||||||
|
|
||||||
//! download keypoints from device to host memory
|
/** @brief Download keypoints from GPU to CPU memory.
|
||||||
|
*/
|
||||||
static void downloadKeypoints(const GpuMat& d_keypoints, std::vector<KeyPoint>& keypoints);
|
static void downloadKeypoints(const GpuMat& d_keypoints, std::vector<KeyPoint>& keypoints);
|
||||||
|
|
||||||
//! convert keypoints to KeyPoint vector
|
/** @brief Converts keypoints from CUDA representation to vector of KeyPoint.
|
||||||
|
*/
|
||||||
static void convertKeypoints(const Mat& h_keypoints, std::vector<KeyPoint>& keypoints);
|
static void convertKeypoints(const Mat& h_keypoints, std::vector<KeyPoint>& keypoints);
|
||||||
|
|
||||||
//! release temporary buffer's memory
|
/** @brief Releases inner buffer memory.
|
||||||
|
*/
|
||||||
void release();
|
void release();
|
||||||
|
|
||||||
bool nonmaxSuppression;
|
bool nonmaxSuppression;
|
||||||
@ -239,13 +288,22 @@ public:
|
|||||||
//! max keypoints = keypointsRatio * img.size().area()
|
//! max keypoints = keypointsRatio * img.size().area()
|
||||||
double keypointsRatio;
|
double keypointsRatio;
|
||||||
|
|
||||||
//! find keypoints and compute it's response if nonmaxSuppression is true
|
/** @brief Find keypoints and compute it's response if nonmaxSuppression is true.
|
||||||
//! return count of detected keypoints
|
|
||||||
|
@param image Image where keypoints (corners) are detected. Only 8-bit grayscale images are
|
||||||
|
supported.
|
||||||
|
@param mask Optional input mask that marks the regions where we should detect features.
|
||||||
|
|
||||||
|
The function returns count of detected keypoints.
|
||||||
|
*/
|
||||||
int calcKeyPointsLocation(const GpuMat& image, const GpuMat& mask);
|
int calcKeyPointsLocation(const GpuMat& image, const GpuMat& mask);
|
||||||
|
|
||||||
//! get final array of keypoints
|
/** @brief Gets final array of keypoints.
|
||||||
//! performs nonmax suppression if needed
|
|
||||||
//! return final count of keypoints
|
@param keypoints The output vector of keypoints.
|
||||||
|
|
||||||
|
The function performs non-max suppression if needed and returns final count of keypoints.
|
||||||
|
*/
|
||||||
int getKeyPoints(GpuMat& keypoints);
|
int getKeyPoints(GpuMat& keypoints);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -257,6 +315,8 @@ private:
|
|||||||
GpuMat d_keypoints_;
|
GpuMat d_keypoints_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Class for extracting ORB features and descriptors from an image. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS ORB_CUDA
|
class CV_EXPORTS ORB_CUDA
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -276,28 +336,51 @@ public:
|
|||||||
DEFAULT_FAST_THRESHOLD = 20
|
DEFAULT_FAST_THRESHOLD = 20
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Constructor
|
/** @brief Constructor.
|
||||||
|
|
||||||
|
@param nFeatures The number of desired features.
|
||||||
|
@param scaleFactor Coefficient by which we divide the dimensions from one scale pyramid level to
|
||||||
|
the next.
|
||||||
|
@param nLevels The number of levels in the scale pyramid.
|
||||||
|
@param edgeThreshold How far from the boundary the points should be.
|
||||||
|
@param firstLevel The level at which the image is given. If 1, that means we will also look at the
|
||||||
|
image scaleFactor times bigger.
|
||||||
|
@param WTA_K
|
||||||
|
@param scoreType
|
||||||
|
@param patchSize
|
||||||
|
*/
|
||||||
explicit ORB_CUDA(int nFeatures = 500, float scaleFactor = 1.2f, int nLevels = 8, int edgeThreshold = 31,
|
explicit ORB_CUDA(int nFeatures = 500, float scaleFactor = 1.2f, int nLevels = 8, int edgeThreshold = 31,
|
||||||
int firstLevel = 0, int WTA_K = 2, int scoreType = 0, int patchSize = 31);
|
int firstLevel = 0, int WTA_K = 2, int scoreType = 0, int patchSize = 31);
|
||||||
|
|
||||||
//! Compute the ORB features on an image
|
/** @overload */
|
||||||
//! image - the image to compute the features (supports only CV_8UC1 images)
|
|
||||||
//! mask - the mask to apply
|
|
||||||
//! keypoints - the resulting keypoints
|
|
||||||
void operator()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints);
|
void operator()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints);
|
||||||
|
/** @overload */
|
||||||
void operator()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints);
|
void operator()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints);
|
||||||
|
|
||||||
//! Compute the ORB features and descriptors on an image
|
/** @brief Detects keypoints and computes descriptors for them.
|
||||||
//! image - the image to compute the features (supports only CV_8UC1 images)
|
|
||||||
//! mask - the mask to apply
|
@param image Input 8-bit grayscale image.
|
||||||
//! keypoints - the resulting keypoints
|
@param mask Optional input mask that marks the regions where we should detect features.
|
||||||
//! descriptors - descriptors array
|
@param keypoints The input/output vector of keypoints. Can be stored both in CPU and GPU memory.
|
||||||
|
For GPU memory:
|
||||||
|
- keypoints.ptr\<float\>(X_ROW)[i] contains x coordinate of the i'th feature.
|
||||||
|
- keypoints.ptr\<float\>(Y_ROW)[i] contains y coordinate of the i'th feature.
|
||||||
|
- keypoints.ptr\<float\>(RESPONSE_ROW)[i] contains the response of the i'th feature.
|
||||||
|
- keypoints.ptr\<float\>(ANGLE_ROW)[i] contains orientation of the i'th feature.
|
||||||
|
- keypoints.ptr\<float\>(OCTAVE_ROW)[i] contains the octave of the i'th feature.
|
||||||
|
- keypoints.ptr\<float\>(SIZE_ROW)[i] contains the size of the i'th feature.
|
||||||
|
@param descriptors Computed descriptors. if blurForDescriptor is true, image will be blurred
|
||||||
|
before descriptors calculation.
|
||||||
|
*/
|
||||||
void operator()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors);
|
void operator()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors);
|
||||||
|
/** @overload */
|
||||||
void operator()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors);
|
void operator()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors);
|
||||||
|
|
||||||
//! download keypoints from device to host memory
|
/** @brief Download keypoints from GPU to CPU memory.
|
||||||
|
*/
|
||||||
static void downloadKeyPoints(const GpuMat& d_keypoints, std::vector<KeyPoint>& keypoints);
|
static void downloadKeyPoints(const GpuMat& d_keypoints, std::vector<KeyPoint>& keypoints);
|
||||||
//! convert keypoints to KeyPoint vector
|
/** @brief Converts keypoints from CUDA representation to vector of KeyPoint.
|
||||||
|
*/
|
||||||
static void convertKeyPoints(const Mat& d_keypoints, std::vector<KeyPoint>& keypoints);
|
static void convertKeyPoints(const Mat& d_keypoints, std::vector<KeyPoint>& keypoints);
|
||||||
|
|
||||||
//! returns the descriptor size in bytes
|
//! returns the descriptor size in bytes
|
||||||
@ -309,7 +392,8 @@ public:
|
|||||||
fastDetector_.nonmaxSuppression = nonmaxSuppression;
|
fastDetector_.nonmaxSuppression = nonmaxSuppression;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! release temporary buffer's memory
|
/** @brief Releases inner buffer memory.
|
||||||
|
*/
|
||||||
void release();
|
void release();
|
||||||
|
|
||||||
//! if true, image will be blurred before descriptors calculation
|
//! if true, image will be blurred before descriptors calculation
|
||||||
@ -335,10 +419,10 @@ private:
|
|||||||
int scoreType_;
|
int scoreType_;
|
||||||
int patchSize_;
|
int patchSize_;
|
||||||
|
|
||||||
// The number of desired features per scale
|
//! The number of desired features per scale
|
||||||
std::vector<size_t> n_features_per_level_;
|
std::vector<size_t> n_features_per_level_;
|
||||||
|
|
||||||
// Points to compute BRIEF descriptors from
|
//! Points to compute BRIEF descriptors from
|
||||||
GpuMat pattern_;
|
GpuMat pattern_;
|
||||||
|
|
||||||
std::vector<GpuMat> imagePyr_;
|
std::vector<GpuMat> imagePyr_;
|
||||||
@ -356,6 +440,8 @@ private:
|
|||||||
GpuMat d_keypoints_;
|
GpuMat d_keypoints_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDAFEATURES2D_HPP__ */
|
#endif /* __OPENCV_CUDAFEATURES2D_HPP__ */
|
||||||
|
@ -50,65 +50,189 @@
|
|||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
#include "opencv2/imgproc.hpp"
|
#include "opencv2/imgproc.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudafilters Image Filtering
|
||||||
|
|
||||||
|
Functions and classes described in this section are used to perform various linear or non-linear
|
||||||
|
filtering operations on 2D images.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example containing all basic morphology operators like erode and dilate can be found at
|
||||||
|
opencv_source_code/samples/gpu/morphology.cpp
|
||||||
|
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
|
//! @addtogroup cudafilters
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Common interface for all CUDA filters :
|
||||||
|
*/
|
||||||
class CV_EXPORTS Filter : public Algorithm
|
class CV_EXPORTS Filter : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Applies the specified filter to the image.
|
||||||
|
|
||||||
|
@param src Input image.
|
||||||
|
@param dst Output image.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
virtual void apply(InputArray src, OutputArray dst, Stream& stream = Stream::Null()) = 0;
|
virtual void apply(InputArray src, OutputArray dst, Stream& stream = Stream::Null()) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Box Filter
|
// Box Filter
|
||||||
|
|
||||||
//! creates a normalized 2D box filter
|
/** @brief Creates a normalized 2D box filter.
|
||||||
//! supports CV_8UC1, CV_8UC4 types
|
|
||||||
|
@param srcType Input image type. Only CV_8UC1 and CV_8UC4 are supported for now.
|
||||||
|
@param dstType Output image type. Only the same type as src is supported for now.
|
||||||
|
@param ksize Kernel size.
|
||||||
|
@param anchor Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel
|
||||||
|
center.
|
||||||
|
@param borderMode Pixel extrapolation method. For details, see borderInterpolate .
|
||||||
|
@param borderVal Default border value.
|
||||||
|
|
||||||
|
@sa boxFilter
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createBoxFilter(int srcType, int dstType, Size ksize, Point anchor = Point(-1,-1),
|
CV_EXPORTS Ptr<Filter> createBoxFilter(int srcType, int dstType, Size ksize, Point anchor = Point(-1,-1),
|
||||||
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Linear Filter
|
// Linear Filter
|
||||||
|
|
||||||
//! Creates a non-separable linear 2D filter
|
/** @brief Creates a non-separable linear 2D filter.
|
||||||
//! supports 1 and 4 channel CV_8U, CV_16U and CV_32F input
|
|
||||||
|
@param srcType Input image type. Supports CV_8U , CV_16U and CV_32F one and four channel image.
|
||||||
|
@param dstType Output image type. Only the same type as src is supported for now.
|
||||||
|
@param kernel 2D array of filter coefficients.
|
||||||
|
@param anchor Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel
|
||||||
|
center.
|
||||||
|
@param borderMode Pixel extrapolation method. For details, see borderInterpolate .
|
||||||
|
@param borderVal Default border value.
|
||||||
|
|
||||||
|
@sa filter2D
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createLinearFilter(int srcType, int dstType, InputArray kernel, Point anchor = Point(-1,-1),
|
CV_EXPORTS Ptr<Filter> createLinearFilter(int srcType, int dstType, InputArray kernel, Point anchor = Point(-1,-1),
|
||||||
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Laplacian Filter
|
// Laplacian Filter
|
||||||
|
|
||||||
//! creates a Laplacian operator
|
/** @brief Creates a Laplacian operator.
|
||||||
//! supports only ksize = 1 and ksize = 3
|
|
||||||
|
@param srcType Input image type. Supports CV_8U , CV_16U and CV_32F one and four channel image.
|
||||||
|
@param dstType Output image type. Only the same type as src is supported for now.
|
||||||
|
@param ksize Aperture size used to compute the second-derivative filters (see getDerivKernels). It
|
||||||
|
must be positive and odd. Only ksize = 1 and ksize = 3 are supported.
|
||||||
|
@param scale Optional scale factor for the computed Laplacian values. By default, no scaling is
|
||||||
|
applied (see getDerivKernels ).
|
||||||
|
@param borderMode Pixel extrapolation method. For details, see borderInterpolate .
|
||||||
|
@param borderVal Default border value.
|
||||||
|
|
||||||
|
@sa Laplacian
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createLaplacianFilter(int srcType, int dstType, int ksize = 1, double scale = 1,
|
CV_EXPORTS Ptr<Filter> createLaplacianFilter(int srcType, int dstType, int ksize = 1, double scale = 1,
|
||||||
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Separable Linear Filter
|
// Separable Linear Filter
|
||||||
|
|
||||||
//! creates a separable linear filter
|
/** @brief Creates a separable linear filter.
|
||||||
|
|
||||||
|
@param srcType Source array type.
|
||||||
|
@param dstType Destination array type.
|
||||||
|
@param rowKernel Horizontal filter coefficients. Support kernels with size \<= 32 .
|
||||||
|
@param columnKernel Vertical filter coefficients. Support kernels with size \<= 32 .
|
||||||
|
@param anchor Anchor position within the kernel. Negative values mean that anchor is positioned at
|
||||||
|
the aperture center.
|
||||||
|
@param rowBorderMode Pixel extrapolation method in the vertical direction For details, see
|
||||||
|
borderInterpolate.
|
||||||
|
@param columnBorderMode Pixel extrapolation method in the horizontal direction.
|
||||||
|
|
||||||
|
@sa sepFilter2D
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createSeparableLinearFilter(int srcType, int dstType, InputArray rowKernel, InputArray columnKernel,
|
CV_EXPORTS Ptr<Filter> createSeparableLinearFilter(int srcType, int dstType, InputArray rowKernel, InputArray columnKernel,
|
||||||
Point anchor = Point(-1,-1), int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
Point anchor = Point(-1,-1), int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Deriv Filter
|
// Deriv Filter
|
||||||
|
|
||||||
//! creates a generalized Deriv operator
|
/** @brief Creates a generalized Deriv operator.
|
||||||
|
|
||||||
|
@param srcType Source image type.
|
||||||
|
@param dstType Destination array type.
|
||||||
|
@param dx Derivative order in respect of x.
|
||||||
|
@param dy Derivative order in respect of y.
|
||||||
|
@param ksize Aperture size. See getDerivKernels for details.
|
||||||
|
@param normalize Flag indicating whether to normalize (scale down) the filter coefficients or not.
|
||||||
|
See getDerivKernels for details.
|
||||||
|
@param scale Optional scale factor for the computed derivative values. By default, no scaling is
|
||||||
|
applied. For details, see getDerivKernels .
|
||||||
|
@param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
|
||||||
|
borderInterpolate.
|
||||||
|
@param columnBorderMode Pixel extrapolation method in the horizontal direction.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createDerivFilter(int srcType, int dstType, int dx, int dy,
|
CV_EXPORTS Ptr<Filter> createDerivFilter(int srcType, int dstType, int dx, int dy,
|
||||||
int ksize, bool normalize = false, double scale = 1,
|
int ksize, bool normalize = false, double scale = 1,
|
||||||
int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
||||||
|
|
||||||
//! creates a Sobel operator
|
/** @brief Creates a Sobel operator.
|
||||||
|
|
||||||
|
@param srcType Source image type.
|
||||||
|
@param dstType Destination array type.
|
||||||
|
@param dx Derivative order in respect of x.
|
||||||
|
@param dy Derivative order in respect of y.
|
||||||
|
@param ksize Size of the extended Sobel kernel. Possible values are 1, 3, 5 or 7.
|
||||||
|
@param scale Optional scale factor for the computed derivative values. By default, no scaling is
|
||||||
|
applied. For details, see getDerivKernels .
|
||||||
|
@param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
|
||||||
|
borderInterpolate.
|
||||||
|
@param columnBorderMode Pixel extrapolation method in the horizontal direction.
|
||||||
|
|
||||||
|
@sa Sobel
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createSobelFilter(int srcType, int dstType, int dx, int dy, int ksize = 3,
|
CV_EXPORTS Ptr<Filter> createSobelFilter(int srcType, int dstType, int dx, int dy, int ksize = 3,
|
||||||
double scale = 1, int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
double scale = 1, int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
||||||
|
|
||||||
//! creates a vertical or horizontal Scharr operator
|
/** @brief Creates a vertical or horizontal Scharr operator.
|
||||||
|
|
||||||
|
@param srcType Source image type.
|
||||||
|
@param dstType Destination array type.
|
||||||
|
@param dx Order of the derivative x.
|
||||||
|
@param dy Order of the derivative y.
|
||||||
|
@param scale Optional scale factor for the computed derivative values. By default, no scaling is
|
||||||
|
applied. See getDerivKernels for details.
|
||||||
|
@param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
|
||||||
|
borderInterpolate.
|
||||||
|
@param columnBorderMode Pixel extrapolation method in the horizontal direction.
|
||||||
|
|
||||||
|
@sa Scharr
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createScharrFilter(int srcType, int dstType, int dx, int dy,
|
CV_EXPORTS Ptr<Filter> createScharrFilter(int srcType, int dstType, int dx, int dy,
|
||||||
double scale = 1, int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
double scale = 1, int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Gaussian Filter
|
// Gaussian Filter
|
||||||
|
|
||||||
//! creates a Gaussian filter
|
/** @brief Creates a Gaussian filter.
|
||||||
|
|
||||||
|
@param srcType Source image type.
|
||||||
|
@param dstType Destination array type.
|
||||||
|
@param ksize Aperture size. See getGaussianKernel for details.
|
||||||
|
@param sigma1 Gaussian sigma in the horizontal direction. See getGaussianKernel for details.
|
||||||
|
@param sigma2 Gaussian sigma in the vertical direction. If 0, then
|
||||||
|
\f$\texttt{sigma2}\leftarrow\texttt{sigma1}\f$ .
|
||||||
|
@param rowBorderMode Pixel extrapolation method in the vertical direction. For details, see
|
||||||
|
borderInterpolate.
|
||||||
|
@param columnBorderMode Pixel extrapolation method in the horizontal direction.
|
||||||
|
|
||||||
|
@sa GaussianBlur
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createGaussianFilter(int srcType, int dstType, Size ksize,
|
CV_EXPORTS Ptr<Filter> createGaussianFilter(int srcType, int dstType, Size ksize,
|
||||||
double sigma1, double sigma2 = 0,
|
double sigma1, double sigma2 = 0,
|
||||||
int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
int rowBorderMode = BORDER_DEFAULT, int columnBorderMode = -1);
|
||||||
@ -116,19 +240,49 @@ CV_EXPORTS Ptr<Filter> createGaussianFilter(int srcType, int dstType, Size ksize
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Morphology Filter
|
// Morphology Filter
|
||||||
|
|
||||||
//! creates a 2D morphological filter
|
/** @brief Creates a 2D morphological filter.
|
||||||
//! supports CV_8UC1 and CV_8UC4 types
|
|
||||||
|
@param op Type of morphological operation. The following types are possible:
|
||||||
|
- **MORPH_ERODE** erode
|
||||||
|
- **MORPH_DILATE** dilate
|
||||||
|
- **MORPH_OPEN** opening
|
||||||
|
- **MORPH_CLOSE** closing
|
||||||
|
- **MORPH_GRADIENT** morphological gradient
|
||||||
|
- **MORPH_TOPHAT** "top hat"
|
||||||
|
- **MORPH_BLACKHAT** "black hat"
|
||||||
|
@param srcType Input/output image type. Only CV_8UC1 and CV_8UC4 are supported.
|
||||||
|
@param kernel 2D 8-bit structuring element for the morphological operation.
|
||||||
|
@param anchor Anchor position within the structuring element. Negative values mean that the anchor
|
||||||
|
is at the center.
|
||||||
|
@param iterations Number of times erosion and dilation to be applied.
|
||||||
|
|
||||||
|
@sa morphologyEx
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createMorphologyFilter(int op, int srcType, InputArray kernel, Point anchor = Point(-1, -1), int iterations = 1);
|
CV_EXPORTS Ptr<Filter> createMorphologyFilter(int op, int srcType, InputArray kernel, Point anchor = Point(-1, -1), int iterations = 1);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Image Rank Filter
|
// Image Rank Filter
|
||||||
|
|
||||||
//! result pixel value is the maximum of pixel values under the rectangular mask region
|
/** @brief Creates the maximum filter.
|
||||||
|
|
||||||
|
@param srcType Input/output image type. Only CV_8UC1 and CV_8UC4 are supported.
|
||||||
|
@param ksize Kernel size.
|
||||||
|
@param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
|
||||||
|
@param borderMode Pixel extrapolation method. For details, see borderInterpolate .
|
||||||
|
@param borderVal Default border value.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createBoxMaxFilter(int srcType, Size ksize,
|
CV_EXPORTS Ptr<Filter> createBoxMaxFilter(int srcType, Size ksize,
|
||||||
Point anchor = Point(-1, -1),
|
Point anchor = Point(-1, -1),
|
||||||
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
||||||
|
|
||||||
//! result pixel value is the maximum of pixel values under the rectangular mask region
|
/** @brief Creates the minimum filter.
|
||||||
|
|
||||||
|
@param srcType Input/output image type. Only CV_8UC1 and CV_8UC4 are supported.
|
||||||
|
@param ksize Kernel size.
|
||||||
|
@param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
|
||||||
|
@param borderMode Pixel extrapolation method. For details, see borderInterpolate .
|
||||||
|
@param borderVal Default border value.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createBoxMinFilter(int srcType, Size ksize,
|
CV_EXPORTS Ptr<Filter> createBoxMinFilter(int srcType, Size ksize,
|
||||||
Point anchor = Point(-1, -1),
|
Point anchor = Point(-1, -1),
|
||||||
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
||||||
@ -136,14 +290,30 @@ CV_EXPORTS Ptr<Filter> createBoxMinFilter(int srcType, Size ksize,
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// 1D Sum Filter
|
// 1D Sum Filter
|
||||||
|
|
||||||
//! creates a horizontal 1D box filter
|
/** @brief Creates a horizontal 1D box filter.
|
||||||
//! supports only CV_8UC1 source type and CV_32FC1 sum type
|
|
||||||
|
@param srcType Input image type. Only CV_8UC1 type is supported for now.
|
||||||
|
@param dstType Output image type. Only CV_32FC1 type is supported for now.
|
||||||
|
@param ksize Kernel size.
|
||||||
|
@param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
|
||||||
|
@param borderMode Pixel extrapolation method. For details, see borderInterpolate .
|
||||||
|
@param borderVal Default border value.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createRowSumFilter(int srcType, int dstType, int ksize, int anchor = -1, int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
CV_EXPORTS Ptr<Filter> createRowSumFilter(int srcType, int dstType, int ksize, int anchor = -1, int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
||||||
|
|
||||||
//! creates a vertical 1D box filter
|
/** @brief Creates a vertical 1D box filter.
|
||||||
//! supports only CV_8UC1 sum type and CV_32FC1 dst type
|
|
||||||
|
@param srcType Input image type. Only CV_8UC1 type is supported for now.
|
||||||
|
@param dstType Output image type. Only CV_32FC1 type is supported for now.
|
||||||
|
@param ksize Kernel size.
|
||||||
|
@param anchor Anchor point. The default value (-1) means that the anchor is at the kernel center.
|
||||||
|
@param borderMode Pixel extrapolation method. For details, see borderInterpolate .
|
||||||
|
@param borderVal Default border value.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<Filter> createColumnSumFilter(int srcType, int dstType, int ksize, int anchor = -1, int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
CV_EXPORTS Ptr<Filter> createColumnSumFilter(int srcType, int dstType, int ksize, int anchor = -1, int borderMode = BORDER_DEFAULT, Scalar borderVal = Scalar::all(0));
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDAFILTERS_HPP__ */
|
#endif /* __OPENCV_CUDAFILTERS_HPP__ */
|
||||||
|
@ -50,16 +50,48 @@
|
|||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
#include "opencv2/imgproc.hpp"
|
#include "opencv2/imgproc.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudaimgproc Image Processing
|
||||||
|
@{
|
||||||
|
@defgroup cudaimgproc_color Color space processing
|
||||||
|
@defgroup cudaimgproc_hist Histogram Calculation
|
||||||
|
@defgroup cudaimgproc_hough Hough Transform
|
||||||
|
@defgroup cudaimgproc_feature Feature Detection
|
||||||
|
@}
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
|
//! @addtogroup cudaimgproc
|
||||||
|
//! @{
|
||||||
|
|
||||||
/////////////////////////// Color Processing ///////////////////////////
|
/////////////////////////// Color Processing ///////////////////////////
|
||||||
|
|
||||||
//! converts image from one color space to another
|
//! @addtogroup cudaimgproc_color
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Converts an image from one color space to another.
|
||||||
|
|
||||||
|
@param src Source image with CV_8U , CV_16U , or CV_32F depth and 1, 3, or 4 channels.
|
||||||
|
@param dst Destination image.
|
||||||
|
@param code Color space conversion code. For details, see cvtColor .
|
||||||
|
@param dcn Number of channels in the destination image. If the parameter is 0, the number of the
|
||||||
|
channels is derived automatically from src and the code .
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
3-channel color spaces (like HSV, XYZ, and so on) can be stored in a 4-channel image for better
|
||||||
|
performance.
|
||||||
|
|
||||||
|
@sa cvtColor
|
||||||
|
*/
|
||||||
CV_EXPORTS void cvtColor(InputArray src, OutputArray dst, int code, int dcn = 0, Stream& stream = Stream::Null());
|
CV_EXPORTS void cvtColor(InputArray src, OutputArray dst, int code, int dcn = 0, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
// Bayer Demosaicing (Malvar, He, and Cutler)
|
//! Bayer Demosaicing (Malvar, He, and Cutler)
|
||||||
COLOR_BayerBG2BGR_MHT = 256,
|
COLOR_BayerBG2BGR_MHT = 256,
|
||||||
COLOR_BayerGB2BGR_MHT = 257,
|
COLOR_BayerGB2BGR_MHT = 257,
|
||||||
COLOR_BayerRG2BGR_MHT = 258,
|
COLOR_BayerRG2BGR_MHT = 258,
|
||||||
@ -75,105 +107,228 @@ enum
|
|||||||
COLOR_BayerRG2GRAY_MHT = 262,
|
COLOR_BayerRG2GRAY_MHT = 262,
|
||||||
COLOR_BayerGR2GRAY_MHT = 263
|
COLOR_BayerGR2GRAY_MHT = 263
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Converts an image from Bayer pattern to RGB or grayscale.
|
||||||
|
|
||||||
|
@param src Source image (8-bit or 16-bit single channel).
|
||||||
|
@param dst Destination image.
|
||||||
|
@param code Color space conversion code (see the description below).
|
||||||
|
@param dcn Number of channels in the destination image. If the parameter is 0, the number of the
|
||||||
|
channels is derived automatically from src and the code .
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
The function can do the following transformations:
|
||||||
|
|
||||||
|
- Demosaicing using bilinear interpolation
|
||||||
|
|
||||||
|
> - COLOR_BayerBG2GRAY , COLOR_BayerGB2GRAY , COLOR_BayerRG2GRAY , COLOR_BayerGR2GRAY
|
||||||
|
> - COLOR_BayerBG2BGR , COLOR_BayerGB2BGR , COLOR_BayerRG2BGR , COLOR_BayerGR2BGR
|
||||||
|
|
||||||
|
- Demosaicing using Malvar-He-Cutler algorithm (@cite MHT2011)
|
||||||
|
|
||||||
|
> - COLOR_BayerBG2GRAY_MHT , COLOR_BayerGB2GRAY_MHT , COLOR_BayerRG2GRAY_MHT ,
|
||||||
|
> COLOR_BayerGR2GRAY_MHT
|
||||||
|
> - COLOR_BayerBG2BGR_MHT , COLOR_BayerGB2BGR_MHT , COLOR_BayerRG2BGR_MHT ,
|
||||||
|
> COLOR_BayerGR2BGR_MHT
|
||||||
|
|
||||||
|
@sa cvtColor
|
||||||
|
*/
|
||||||
CV_EXPORTS void demosaicing(InputArray src, OutputArray dst, int code, int dcn = -1, Stream& stream = Stream::Null());
|
CV_EXPORTS void demosaicing(InputArray src, OutputArray dst, int code, int dcn = -1, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! swap channels
|
/** @brief Exchanges the color channels of an image in-place.
|
||||||
//! dstOrder - Integer array describing how channel values are permutated. The n-th entry
|
|
||||||
//! of the array contains the number of the channel that is stored in the n-th channel of
|
@param image Source image. Supports only CV_8UC4 type.
|
||||||
//! the output image. E.g. Given an RGBA image, aDstOrder = [3,2,1,0] converts this to ABGR
|
@param dstOrder Integer array describing how channel values are permutated. The n-th entry of the
|
||||||
//! channel order.
|
array contains the number of the channel that is stored in the n-th channel of the output image.
|
||||||
|
E.g. Given an RGBA image, aDstOrder = [3,2,1,0] converts this to ABGR channel order.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
The methods support arbitrary permutations of the original channels, including replication.
|
||||||
|
*/
|
||||||
CV_EXPORTS void swapChannels(InputOutputArray image, const int dstOrder[4], Stream& stream = Stream::Null());
|
CV_EXPORTS void swapChannels(InputOutputArray image, const int dstOrder[4], Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! Routines for correcting image color gamma
|
/** @brief Routines for correcting image color gamma.
|
||||||
|
|
||||||
|
@param src Source image (3- or 4-channel 8 bit).
|
||||||
|
@param dst Destination image.
|
||||||
|
@param forward true for forward gamma correction or false for inverse gamma correction.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
CV_EXPORTS void gammaCorrection(InputArray src, OutputArray dst, bool forward = true, Stream& stream = Stream::Null());
|
CV_EXPORTS void gammaCorrection(InputArray src, OutputArray dst, bool forward = true, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
enum { ALPHA_OVER, ALPHA_IN, ALPHA_OUT, ALPHA_ATOP, ALPHA_XOR, ALPHA_PLUS, ALPHA_OVER_PREMUL, ALPHA_IN_PREMUL, ALPHA_OUT_PREMUL,
|
enum { ALPHA_OVER, ALPHA_IN, ALPHA_OUT, ALPHA_ATOP, ALPHA_XOR, ALPHA_PLUS, ALPHA_OVER_PREMUL, ALPHA_IN_PREMUL, ALPHA_OUT_PREMUL,
|
||||||
ALPHA_ATOP_PREMUL, ALPHA_XOR_PREMUL, ALPHA_PLUS_PREMUL, ALPHA_PREMUL};
|
ALPHA_ATOP_PREMUL, ALPHA_XOR_PREMUL, ALPHA_PLUS_PREMUL, ALPHA_PREMUL};
|
||||||
|
|
||||||
//! Composite two images using alpha opacity values contained in each image
|
/** @brief Composites two images using alpha opacity values contained in each image.
|
||||||
//! Supports CV_8UC4, CV_16UC4, CV_32SC4 and CV_32FC4 types
|
|
||||||
|
@param img1 First image. Supports CV_8UC4 , CV_16UC4 , CV_32SC4 and CV_32FC4 types.
|
||||||
|
@param img2 Second image. Must have the same size and the same type as img1 .
|
||||||
|
@param dst Destination image.
|
||||||
|
@param alpha_op Flag specifying the alpha-blending operation:
|
||||||
|
- **ALPHA_OVER**
|
||||||
|
- **ALPHA_IN**
|
||||||
|
- **ALPHA_OUT**
|
||||||
|
- **ALPHA_ATOP**
|
||||||
|
- **ALPHA_XOR**
|
||||||
|
- **ALPHA_PLUS**
|
||||||
|
- **ALPHA_OVER_PREMUL**
|
||||||
|
- **ALPHA_IN_PREMUL**
|
||||||
|
- **ALPHA_OUT_PREMUL**
|
||||||
|
- **ALPHA_ATOP_PREMUL**
|
||||||
|
- **ALPHA_XOR_PREMUL**
|
||||||
|
- **ALPHA_PLUS_PREMUL**
|
||||||
|
- **ALPHA_PREMUL**
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example demonstrating the use of alphaComp can be found at
|
||||||
|
opencv_source_code/samples/gpu/alpha_comp.cpp
|
||||||
|
*/
|
||||||
CV_EXPORTS void alphaComp(InputArray img1, InputArray img2, OutputArray dst, int alpha_op, Stream& stream = Stream::Null());
|
CV_EXPORTS void alphaComp(InputArray img1, InputArray img2, OutputArray dst, int alpha_op, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
//! @} cudaimgproc_color
|
||||||
|
|
||||||
////////////////////////////// Histogram ///////////////////////////////
|
////////////////////////////// Histogram ///////////////////////////////
|
||||||
|
|
||||||
//! Calculates histogram for 8u one channel image
|
//! @addtogroup cudaimgproc_hist
|
||||||
//! Output hist will have one row, 256 cols and CV32SC1 type.
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Calculates histogram for one channel 8-bit image.
|
||||||
|
|
||||||
|
@param src Source image with CV_8UC1 type.
|
||||||
|
@param hist Destination histogram with one row, 256 columns, and the CV_32SC1 type.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
CV_EXPORTS void calcHist(InputArray src, OutputArray hist, Stream& stream = Stream::Null());
|
CV_EXPORTS void calcHist(InputArray src, OutputArray hist, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! normalizes the grayscale image brightness and contrast by normalizing its histogram
|
/** @brief Equalizes the histogram of a grayscale image.
|
||||||
|
|
||||||
|
@param src Source image with CV_8UC1 type.
|
||||||
|
@param dst Destination image.
|
||||||
|
@param buf Optional buffer to avoid extra memory allocations (for many calls with the same sizes).
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa equalizeHist
|
||||||
|
*/
|
||||||
CV_EXPORTS void equalizeHist(InputArray src, OutputArray dst, InputOutputArray buf, Stream& stream = Stream::Null());
|
CV_EXPORTS void equalizeHist(InputArray src, OutputArray dst, InputOutputArray buf, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
static inline void equalizeHist(InputArray src, OutputArray dst, Stream& stream = Stream::Null())
|
static inline void equalizeHist(InputArray src, OutputArray dst, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
GpuMat buf;
|
GpuMat buf;
|
||||||
cuda::equalizeHist(src, dst, buf, stream);
|
cuda::equalizeHist(src, dst, buf, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @brief Base class for Contrast Limited Adaptive Histogram Equalization. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS CLAHE : public cv::CLAHE
|
class CV_EXPORTS CLAHE : public cv::CLAHE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using cv::CLAHE::apply;
|
using cv::CLAHE::apply;
|
||||||
|
/** @brief Equalizes the histogram of a grayscale image using Contrast Limited Adaptive Histogram Equalization.
|
||||||
|
|
||||||
|
@param src Source image with CV_8UC1 type.
|
||||||
|
@param dst Destination image.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
virtual void apply(InputArray src, OutputArray dst, Stream& stream) = 0;
|
virtual void apply(InputArray src, OutputArray dst, Stream& stream) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates implementation for cuda::CLAHE .
|
||||||
|
|
||||||
|
@param clipLimit Threshold for contrast limiting.
|
||||||
|
@param tileGridSize Size of grid for histogram equalization. Input image will be divided into
|
||||||
|
equally sized rectangular tiles. tileGridSize defines the number of tiles in row and column.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::CLAHE> createCLAHE(double clipLimit = 40.0, Size tileGridSize = Size(8, 8));
|
CV_EXPORTS Ptr<cuda::CLAHE> createCLAHE(double clipLimit = 40.0, Size tileGridSize = Size(8, 8));
|
||||||
|
|
||||||
//! Compute levels with even distribution. levels will have 1 row and nLevels cols and CV_32SC1 type.
|
/** @brief Computes levels with even distribution.
|
||||||
|
|
||||||
|
@param levels Destination array. levels has 1 row, nLevels columns, and the CV_32SC1 type.
|
||||||
|
@param nLevels Number of computed levels. nLevels must be at least 2.
|
||||||
|
@param lowerLevel Lower boundary value of the lowest level.
|
||||||
|
@param upperLevel Upper boundary value of the greatest level.
|
||||||
|
*/
|
||||||
CV_EXPORTS void evenLevels(OutputArray levels, int nLevels, int lowerLevel, int upperLevel);
|
CV_EXPORTS void evenLevels(OutputArray levels, int nLevels, int lowerLevel, int upperLevel);
|
||||||
|
|
||||||
//! Calculates histogram with evenly distributed bins for signle channel source.
|
/** @brief Calculates a histogram with evenly distributed bins.
|
||||||
//! Supports CV_8UC1, CV_16UC1 and CV_16SC1 source types.
|
|
||||||
//! Output hist will have one row and histSize cols and CV_32SC1 type.
|
@param src Source image. CV_8U, CV_16U, or CV_16S depth and 1 or 4 channels are supported. For
|
||||||
|
a four-channel image, all channels are processed separately.
|
||||||
|
@param hist Destination histogram with one row, histSize columns, and the CV_32S type.
|
||||||
|
@param histSize Size of the histogram.
|
||||||
|
@param lowerLevel Lower boundary of lowest-level bin.
|
||||||
|
@param upperLevel Upper boundary of highest-level bin.
|
||||||
|
@param buf Optional buffer to avoid extra memory allocations (for many calls with the same sizes).
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
CV_EXPORTS void histEven(InputArray src, OutputArray hist, InputOutputArray buf, int histSize, int lowerLevel, int upperLevel, Stream& stream = Stream::Null());
|
CV_EXPORTS void histEven(InputArray src, OutputArray hist, InputOutputArray buf, int histSize, int lowerLevel, int upperLevel, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
static inline void histEven(InputArray src, OutputArray hist, int histSize, int lowerLevel, int upperLevel, Stream& stream = Stream::Null())
|
static inline void histEven(InputArray src, OutputArray hist, int histSize, int lowerLevel, int upperLevel, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
GpuMat buf;
|
GpuMat buf;
|
||||||
cuda::histEven(src, hist, buf, histSize, lowerLevel, upperLevel, stream);
|
cuda::histEven(src, hist, buf, histSize, lowerLevel, upperLevel, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Calculates histogram with evenly distributed bins for four-channel source.
|
/** @overload */
|
||||||
//! All channels of source are processed separately.
|
|
||||||
//! Supports CV_8UC4, CV_16UC4 and CV_16SC4 source types.
|
|
||||||
//! Output hist[i] will have one row and histSize[i] cols and CV_32SC1 type.
|
|
||||||
CV_EXPORTS void histEven(InputArray src, GpuMat hist[4], InputOutputArray buf, int histSize[4], int lowerLevel[4], int upperLevel[4], Stream& stream = Stream::Null());
|
CV_EXPORTS void histEven(InputArray src, GpuMat hist[4], InputOutputArray buf, int histSize[4], int lowerLevel[4], int upperLevel[4], Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
static inline void histEven(InputArray src, GpuMat hist[4], int histSize[4], int lowerLevel[4], int upperLevel[4], Stream& stream = Stream::Null())
|
static inline void histEven(InputArray src, GpuMat hist[4], int histSize[4], int lowerLevel[4], int upperLevel[4], Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
GpuMat buf;
|
GpuMat buf;
|
||||||
cuda::histEven(src, hist, buf, histSize, lowerLevel, upperLevel, stream);
|
cuda::histEven(src, hist, buf, histSize, lowerLevel, upperLevel, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Calculates histogram with bins determined by levels array.
|
/** @brief Calculates a histogram with bins determined by the levels array.
|
||||||
//! levels must have one row and CV_32SC1 type if source has integer type or CV_32FC1 otherwise.
|
|
||||||
//! Supports CV_8UC1, CV_16UC1, CV_16SC1 and CV_32FC1 source types.
|
@param src Source image. CV_8U , CV_16U , or CV_16S depth and 1 or 4 channels are supported.
|
||||||
//! Output hist will have one row and (levels.cols-1) cols and CV_32SC1 type.
|
For a four-channel image, all channels are processed separately.
|
||||||
|
@param hist Destination histogram with one row, (levels.cols-1) columns, and the CV_32SC1 type.
|
||||||
|
@param levels Number of levels in the histogram.
|
||||||
|
@param buf Optional buffer to avoid extra memory allocations (for many calls with the same sizes).
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
CV_EXPORTS void histRange(InputArray src, OutputArray hist, InputArray levels, InputOutputArray buf, Stream& stream = Stream::Null());
|
CV_EXPORTS void histRange(InputArray src, OutputArray hist, InputArray levels, InputOutputArray buf, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
static inline void histRange(InputArray src, OutputArray hist, InputArray levels, Stream& stream = Stream::Null())
|
static inline void histRange(InputArray src, OutputArray hist, InputArray levels, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
GpuMat buf;
|
GpuMat buf;
|
||||||
cuda::histRange(src, hist, levels, buf, stream);
|
cuda::histRange(src, hist, levels, buf, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Calculates histogram with bins determined by levels array.
|
/** @overload */
|
||||||
//! All levels must have one row and CV_32SC1 type if source has integer type or CV_32FC1 otherwise.
|
|
||||||
//! All channels of source are processed separately.
|
|
||||||
//! Supports CV_8UC4, CV_16UC4, CV_16SC4 and CV_32FC4 source types.
|
|
||||||
//! Output hist[i] will have one row and (levels[i].cols-1) cols and CV_32SC1 type.
|
|
||||||
CV_EXPORTS void histRange(InputArray src, GpuMat hist[4], const GpuMat levels[4], InputOutputArray buf, Stream& stream = Stream::Null());
|
CV_EXPORTS void histRange(InputArray src, GpuMat hist[4], const GpuMat levels[4], InputOutputArray buf, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
static inline void histRange(InputArray src, GpuMat hist[4], const GpuMat levels[4], Stream& stream = Stream::Null())
|
static inline void histRange(InputArray src, GpuMat hist[4], const GpuMat levels[4], Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
GpuMat buf;
|
GpuMat buf;
|
||||||
cuda::histRange(src, hist, levels, buf, stream);
|
cuda::histRange(src, hist, levels, buf, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @} cudaimgproc_hist
|
||||||
|
|
||||||
//////////////////////////////// Canny ////////////////////////////////
|
//////////////////////////////// Canny ////////////////////////////////
|
||||||
|
|
||||||
|
/** @brief Base class for Canny Edge Detector. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS CannyEdgeDetector : public Algorithm
|
class CV_EXPORTS CannyEdgeDetector : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Finds edges in an image using the @cite Canny86 algorithm.
|
||||||
|
|
||||||
|
@param image Single-channel 8-bit input image.
|
||||||
|
@param edges Output edge map. It has the same size and type as image .
|
||||||
|
*/
|
||||||
virtual void detect(InputArray image, OutputArray edges) = 0;
|
virtual void detect(InputArray image, OutputArray edges) = 0;
|
||||||
|
/** @overload
|
||||||
|
@param dx First derivative of image in the vertical direction. Support only CV_32S type.
|
||||||
|
@param dy First derivative of image in the horizontal direction. Support only CV_32S type.
|
||||||
|
@param edges Output edge map. It has the same size and type as image .
|
||||||
|
*/
|
||||||
virtual void detect(InputArray dx, InputArray dy, OutputArray edges) = 0;
|
virtual void detect(InputArray dx, InputArray dy, OutputArray edges) = 0;
|
||||||
|
|
||||||
virtual void setLowThreshold(double low_thresh) = 0;
|
virtual void setLowThreshold(double low_thresh) = 0;
|
||||||
@ -189,6 +344,16 @@ public:
|
|||||||
virtual bool getL2Gradient() const = 0;
|
virtual bool getL2Gradient() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates implementation for cuda::CannyEdgeDetector .
|
||||||
|
|
||||||
|
@param low_thresh First threshold for the hysteresis procedure.
|
||||||
|
@param high_thresh Second threshold for the hysteresis procedure.
|
||||||
|
@param apperture_size Aperture size for the Sobel operator.
|
||||||
|
@param L2gradient Flag indicating whether a more accurate \f$L_2\f$ norm
|
||||||
|
\f$=\sqrt{(dI/dx)^2 + (dI/dy)^2}\f$ should be used to compute the image gradient magnitude (
|
||||||
|
L2gradient=true ), or a faster default \f$L_1\f$ norm \f$=|dI/dx|+|dI/dy|\f$ is enough ( L2gradient=false
|
||||||
|
).
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<CannyEdgeDetector> createCannyEdgeDetector(double low_thresh, double high_thresh, int apperture_size = 3, bool L2gradient = false);
|
CV_EXPORTS Ptr<CannyEdgeDetector> createCannyEdgeDetector(double low_thresh, double high_thresh, int apperture_size = 3, bool L2gradient = false);
|
||||||
|
|
||||||
/////////////////////////// Hough Transform ////////////////////////////
|
/////////////////////////// Hough Transform ////////////////////////////
|
||||||
@ -196,10 +361,32 @@ CV_EXPORTS Ptr<CannyEdgeDetector> createCannyEdgeDetector(double low_thresh, dou
|
|||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
// HoughLines
|
// HoughLines
|
||||||
|
|
||||||
|
//! @addtogroup cudaimgproc_hough
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Base class for lines detector algorithm. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS HoughLinesDetector : public Algorithm
|
class CV_EXPORTS HoughLinesDetector : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Finds lines in a binary image using the classical Hough transform.
|
||||||
|
|
||||||
|
@param src 8-bit, single-channel binary source image.
|
||||||
|
@param lines Output vector of lines. Each line is represented by a two-element vector
|
||||||
|
\f$(\rho, \theta)\f$ . \f$\rho\f$ is the distance from the coordinate origin \f$(0,0)\f$ (top-left corner of
|
||||||
|
the image). \f$\theta\f$ is the line rotation angle in radians (
|
||||||
|
\f$0 \sim \textrm{vertical line}, \pi/2 \sim \textrm{horizontal line}\f$ ).
|
||||||
|
|
||||||
|
@sa HoughLines
|
||||||
|
*/
|
||||||
virtual void detect(InputArray src, OutputArray lines) = 0;
|
virtual void detect(InputArray src, OutputArray lines) = 0;
|
||||||
|
|
||||||
|
/** @brief Downloads results from cuda::HoughLinesDetector::detect to host memory.
|
||||||
|
|
||||||
|
@param d_lines Result of cuda::HoughLinesDetector::detect .
|
||||||
|
@param h_lines Output host array.
|
||||||
|
@param h_votes Optional output array for line's votes.
|
||||||
|
*/
|
||||||
virtual void downloadResults(InputArray d_lines, OutputArray h_lines, OutputArray h_votes = noArray()) = 0;
|
virtual void downloadResults(InputArray d_lines, OutputArray h_lines, OutputArray h_votes = noArray()) = 0;
|
||||||
|
|
||||||
virtual void setRho(float rho) = 0;
|
virtual void setRho(float rho) = 0;
|
||||||
@ -218,16 +405,35 @@ public:
|
|||||||
virtual int getMaxLines() const = 0;
|
virtual int getMaxLines() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates implementation for cuda::HoughLinesDetector .
|
||||||
|
|
||||||
|
@param rho Distance resolution of the accumulator in pixels.
|
||||||
|
@param theta Angle resolution of the accumulator in radians.
|
||||||
|
@param threshold Accumulator threshold parameter. Only those lines are returned that get enough
|
||||||
|
votes ( \f$>\texttt{threshold}\f$ ).
|
||||||
|
@param doSort Performs lines sort by votes.
|
||||||
|
@param maxLines Maximum number of output lines.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<HoughLinesDetector> createHoughLinesDetector(float rho, float theta, int threshold, bool doSort = false, int maxLines = 4096);
|
CV_EXPORTS Ptr<HoughLinesDetector> createHoughLinesDetector(float rho, float theta, int threshold, bool doSort = false, int maxLines = 4096);
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
// HoughLinesP
|
// HoughLinesP
|
||||||
|
|
||||||
//! finds line segments in the black-n-white image using probabilistic Hough transform
|
/** @brief Base class for line segments detector algorithm. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS HoughSegmentDetector : public Algorithm
|
class CV_EXPORTS HoughSegmentDetector : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Finds line segments in a binary image using the probabilistic Hough transform.
|
||||||
|
|
||||||
|
@param src 8-bit, single-channel binary source image.
|
||||||
|
@param lines Output vector of lines. Each line is represented by a 4-element vector
|
||||||
|
\f$(x_1, y_1, x_2, y_2)\f$ , where \f$(x_1,y_1)\f$ and \f$(x_2, y_2)\f$ are the ending points of each detected
|
||||||
|
line segment.
|
||||||
|
|
||||||
|
@sa HoughLinesP
|
||||||
|
*/
|
||||||
virtual void detect(InputArray src, OutputArray lines) = 0;
|
virtual void detect(InputArray src, OutputArray lines) = 0;
|
||||||
|
|
||||||
virtual void setRho(float rho) = 0;
|
virtual void setRho(float rho) = 0;
|
||||||
@ -246,14 +452,32 @@ public:
|
|||||||
virtual int getMaxLines() const = 0;
|
virtual int getMaxLines() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates implementation for cuda::HoughSegmentDetector .
|
||||||
|
|
||||||
|
@param rho Distance resolution of the accumulator in pixels.
|
||||||
|
@param theta Angle resolution of the accumulator in radians.
|
||||||
|
@param minLineLength Minimum line length. Line segments shorter than that are rejected.
|
||||||
|
@param maxLineGap Maximum allowed gap between points on the same line to link them.
|
||||||
|
@param maxLines Maximum number of output lines.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<HoughSegmentDetector> createHoughSegmentDetector(float rho, float theta, int minLineLength, int maxLineGap, int maxLines = 4096);
|
CV_EXPORTS Ptr<HoughSegmentDetector> createHoughSegmentDetector(float rho, float theta, int minLineLength, int maxLineGap, int maxLines = 4096);
|
||||||
|
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
// HoughCircles
|
// HoughCircles
|
||||||
|
|
||||||
|
/** @brief Base class for circles detector algorithm. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS HoughCirclesDetector : public Algorithm
|
class CV_EXPORTS HoughCirclesDetector : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Finds circles in a grayscale image using the Hough transform.
|
||||||
|
|
||||||
|
@param src 8-bit, single-channel grayscale input image.
|
||||||
|
@param circles Output vector of found circles. Each vector is encoded as a 3-element
|
||||||
|
floating-point vector \f$(x, y, radius)\f$ .
|
||||||
|
|
||||||
|
@sa HoughCircles
|
||||||
|
*/
|
||||||
virtual void detect(InputArray src, OutputArray circles) = 0;
|
virtual void detect(InputArray src, OutputArray circles) = 0;
|
||||||
|
|
||||||
virtual void setDp(float dp) = 0;
|
virtual void setDp(float dp) = 0;
|
||||||
@ -278,85 +502,257 @@ public:
|
|||||||
virtual int getMaxCircles() const = 0;
|
virtual int getMaxCircles() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates implementation for cuda::HoughCirclesDetector .
|
||||||
|
|
||||||
|
@param dp Inverse ratio of the accumulator resolution to the image resolution. For example, if
|
||||||
|
dp=1 , the accumulator has the same resolution as the input image. If dp=2 , the accumulator has
|
||||||
|
half as big width and height.
|
||||||
|
@param minDist Minimum distance between the centers of the detected circles. If the parameter is
|
||||||
|
too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is
|
||||||
|
too large, some circles may be missed.
|
||||||
|
@param cannyThreshold The higher threshold of the two passed to Canny edge detector (the lower one
|
||||||
|
is twice smaller).
|
||||||
|
@param votesThreshold The accumulator threshold for the circle centers at the detection stage. The
|
||||||
|
smaller it is, the more false circles may be detected.
|
||||||
|
@param minRadius Minimum circle radius.
|
||||||
|
@param maxRadius Maximum circle radius.
|
||||||
|
@param maxCircles Maximum number of output circles.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<HoughCirclesDetector> createHoughCirclesDetector(float dp, float minDist, int cannyThreshold, int votesThreshold, int minRadius, int maxRadius, int maxCircles = 4096);
|
CV_EXPORTS Ptr<HoughCirclesDetector> createHoughCirclesDetector(float dp, float minDist, int cannyThreshold, int votesThreshold, int minRadius, int maxRadius, int maxCircles = 4096);
|
||||||
|
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
// GeneralizedHough
|
// GeneralizedHough
|
||||||
|
|
||||||
//! Ballard, D.H. (1981). Generalizing the Hough transform to detect arbitrary shapes. Pattern Recognition 13 (2): 111-122.
|
/** @brief Creates implementation for generalized hough transform from @cite Ballard1981 .
|
||||||
//! Detects position only without traslation and rotation
|
*/
|
||||||
CV_EXPORTS Ptr<GeneralizedHoughBallard> createGeneralizedHoughBallard();
|
CV_EXPORTS Ptr<GeneralizedHoughBallard> createGeneralizedHoughBallard();
|
||||||
|
|
||||||
//! Guil, N., González-Linares, J.M. and Zapata, E.L. (1999). Bidimensional shape detection using an invariant approach. Pattern Recognition 32 (6): 1025-1038.
|
/** @brief Creates implementation for generalized hough transform from @cite Guil1999 .
|
||||||
//! Detects position, traslation and rotation
|
*/
|
||||||
CV_EXPORTS Ptr<GeneralizedHoughGuil> createGeneralizedHoughGuil();
|
CV_EXPORTS Ptr<GeneralizedHoughGuil> createGeneralizedHoughGuil();
|
||||||
|
|
||||||
|
//! @} cudaimgproc_hough
|
||||||
|
|
||||||
////////////////////////// Corners Detection ///////////////////////////
|
////////////////////////// Corners Detection ///////////////////////////
|
||||||
|
|
||||||
|
//! @addtogroup cudaimgproc_feature
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Base class for Cornerness Criteria computation. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS CornernessCriteria : public Algorithm
|
class CV_EXPORTS CornernessCriteria : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Computes the cornerness criteria at each image pixel.
|
||||||
|
|
||||||
|
@param src Source image.
|
||||||
|
@param dst Destination image containing cornerness values. It will have the same size as src and
|
||||||
|
CV_32FC1 type.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
virtual void compute(InputArray src, OutputArray dst, Stream& stream = Stream::Null()) = 0;
|
virtual void compute(InputArray src, OutputArray dst, Stream& stream = Stream::Null()) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! computes Harris cornerness criteria at each image pixel
|
/** @brief Creates implementation for Harris cornerness criteria.
|
||||||
|
|
||||||
|
@param srcType Input source type. Only CV_8UC1 and CV_32FC1 are supported for now.
|
||||||
|
@param blockSize Neighborhood size.
|
||||||
|
@param ksize Aperture parameter for the Sobel operator.
|
||||||
|
@param k Harris detector free parameter.
|
||||||
|
@param borderType Pixel extrapolation method. Only BORDER_REFLECT101 and BORDER_REPLICATE are
|
||||||
|
supported for now.
|
||||||
|
|
||||||
|
@sa cornerHarris
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<CornernessCriteria> createHarrisCorner(int srcType, int blockSize, int ksize, double k, int borderType = BORDER_REFLECT101);
|
CV_EXPORTS Ptr<CornernessCriteria> createHarrisCorner(int srcType, int blockSize, int ksize, double k, int borderType = BORDER_REFLECT101);
|
||||||
|
|
||||||
//! computes minimum eigen value of 2x2 derivative covariation matrix at each pixel - the cornerness criteria
|
/** @brief Creates implementation for the minimum eigen value of a 2x2 derivative covariation matrix (the
|
||||||
|
cornerness criteria).
|
||||||
|
|
||||||
|
@param srcType Input source type. Only CV_8UC1 and CV_32FC1 are supported for now.
|
||||||
|
@param blockSize Neighborhood size.
|
||||||
|
@param ksize Aperture parameter for the Sobel operator.
|
||||||
|
@param borderType Pixel extrapolation method. Only BORDER_REFLECT101 and BORDER_REPLICATE are
|
||||||
|
supported for now.
|
||||||
|
|
||||||
|
@sa cornerMinEigenVal
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<CornernessCriteria> createMinEigenValCorner(int srcType, int blockSize, int ksize, int borderType = BORDER_REFLECT101);
|
CV_EXPORTS Ptr<CornernessCriteria> createMinEigenValCorner(int srcType, int blockSize, int ksize, int borderType = BORDER_REFLECT101);
|
||||||
|
|
||||||
////////////////////////// Corners Detection ///////////////////////////
|
////////////////////////// Corners Detection ///////////////////////////
|
||||||
|
|
||||||
|
/** @brief Base class for Corners Detector. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS CornersDetector : public Algorithm
|
class CV_EXPORTS CornersDetector : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! return 1 rows matrix with CV_32FC2 type
|
/** @brief Determines strong corners on an image.
|
||||||
|
|
||||||
|
@param image Input 8-bit or floating-point 32-bit, single-channel image.
|
||||||
|
@param corners Output vector of detected corners (1-row matrix with CV_32FC2 type with corners
|
||||||
|
positions).
|
||||||
|
@param mask Optional region of interest. If the image is not empty (it needs to have the type
|
||||||
|
CV_8UC1 and the same size as image ), it specifies the region in which the corners are detected.
|
||||||
|
*/
|
||||||
virtual void detect(InputArray image, OutputArray corners, InputArray mask = noArray()) = 0;
|
virtual void detect(InputArray image, OutputArray corners, InputArray mask = noArray()) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates implementation for cuda::CornersDetector .
|
||||||
|
|
||||||
|
@param srcType Input source type. Only CV_8UC1 and CV_32FC1 are supported for now.
|
||||||
|
@param maxCorners Maximum number of corners to return. If there are more corners than are found,
|
||||||
|
the strongest of them is returned.
|
||||||
|
@param qualityLevel Parameter characterizing the minimal accepted quality of image corners. The
|
||||||
|
parameter value is multiplied by the best corner quality measure, which is the minimal eigenvalue
|
||||||
|
(see cornerMinEigenVal ) or the Harris function response (see cornerHarris ). The corners with the
|
||||||
|
quality measure less than the product are rejected. For example, if the best corner has the
|
||||||
|
quality measure = 1500, and the qualityLevel=0.01 , then all the corners with the quality measure
|
||||||
|
less than 15 are rejected.
|
||||||
|
@param minDistance Minimum possible Euclidean distance between the returned corners.
|
||||||
|
@param blockSize Size of an average block for computing a derivative covariation matrix over each
|
||||||
|
pixel neighborhood. See cornerEigenValsAndVecs .
|
||||||
|
@param useHarrisDetector Parameter indicating whether to use a Harris detector (see cornerHarris)
|
||||||
|
or cornerMinEigenVal.
|
||||||
|
@param harrisK Free parameter of the Harris detector.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<CornersDetector> createGoodFeaturesToTrackDetector(int srcType, int maxCorners = 1000, double qualityLevel = 0.01, double minDistance = 0.0,
|
CV_EXPORTS Ptr<CornersDetector> createGoodFeaturesToTrackDetector(int srcType, int maxCorners = 1000, double qualityLevel = 0.01, double minDistance = 0.0,
|
||||||
int blockSize = 3, bool useHarrisDetector = false, double harrisK = 0.04);
|
int blockSize = 3, bool useHarrisDetector = false, double harrisK = 0.04);
|
||||||
|
|
||||||
|
//! @} cudaimgproc_feature
|
||||||
|
|
||||||
///////////////////////////// Mean Shift //////////////////////////////
|
///////////////////////////// Mean Shift //////////////////////////////
|
||||||
|
|
||||||
//! Does mean shift filtering on GPU.
|
/** @brief Performs mean-shift filtering for each point of the source image.
|
||||||
|
|
||||||
|
@param src Source image. Only CV_8UC4 images are supported for now.
|
||||||
|
@param dst Destination image containing the color of mapped points. It has the same size and type
|
||||||
|
as src .
|
||||||
|
@param sp Spatial window radius.
|
||||||
|
@param sr Color window radius.
|
||||||
|
@param criteria Termination criteria. See TermCriteria.
|
||||||
|
@param stream
|
||||||
|
|
||||||
|
It maps each point of the source image into another point. As a result, you have a new color and new
|
||||||
|
position of each point.
|
||||||
|
*/
|
||||||
CV_EXPORTS void meanShiftFiltering(InputArray src, OutputArray dst, int sp, int sr,
|
CV_EXPORTS void meanShiftFiltering(InputArray src, OutputArray dst, int sp, int sr,
|
||||||
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 5, 1),
|
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 5, 1),
|
||||||
Stream& stream = Stream::Null());
|
Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! Does mean shift procedure on GPU.
|
/** @brief Performs a mean-shift procedure and stores information about processed points (their colors and
|
||||||
|
positions) in two images.
|
||||||
|
|
||||||
|
@param src Source image. Only CV_8UC4 images are supported for now.
|
||||||
|
@param dstr Destination image containing the color of mapped points. The size and type is the same
|
||||||
|
as src .
|
||||||
|
@param dstsp Destination image containing the position of mapped points. The size is the same as
|
||||||
|
src size. The type is CV_16SC2 .
|
||||||
|
@param sp Spatial window radius.
|
||||||
|
@param sr Color window radius.
|
||||||
|
@param criteria Termination criteria. See TermCriteria.
|
||||||
|
@param stream
|
||||||
|
|
||||||
|
@sa cuda::meanShiftFiltering
|
||||||
|
*/
|
||||||
CV_EXPORTS void meanShiftProc(InputArray src, OutputArray dstr, OutputArray dstsp, int sp, int sr,
|
CV_EXPORTS void meanShiftProc(InputArray src, OutputArray dstr, OutputArray dstsp, int sp, int sr,
|
||||||
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 5, 1),
|
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 5, 1),
|
||||||
Stream& stream = Stream::Null());
|
Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! Does mean shift segmentation with elimination of small regions.
|
/** @brief Performs a mean-shift segmentation of the source image and eliminates small segments.
|
||||||
|
|
||||||
|
@param src Source image. Only CV_8UC4 images are supported for now.
|
||||||
|
@param dst Segmented image with the same size and type as src (host memory).
|
||||||
|
@param sp Spatial window radius.
|
||||||
|
@param sr Color window radius.
|
||||||
|
@param minsize Minimum segment size. Smaller segments are merged.
|
||||||
|
@param criteria Termination criteria. See TermCriteria.
|
||||||
|
*/
|
||||||
CV_EXPORTS void meanShiftSegmentation(InputArray src, OutputArray dst, int sp, int sr, int minsize,
|
CV_EXPORTS void meanShiftSegmentation(InputArray src, OutputArray dst, int sp, int sr, int minsize,
|
||||||
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 5, 1));
|
TermCriteria criteria = TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 5, 1));
|
||||||
|
|
||||||
/////////////////////////// Match Template ////////////////////////////
|
/////////////////////////// Match Template ////////////////////////////
|
||||||
|
|
||||||
//! computes the proximity map for the raster template and the image where the template is searched for
|
/** @brief Base class for Template Matching. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS TemplateMatching : public Algorithm
|
class CV_EXPORTS TemplateMatching : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Computes a proximity map for a raster template and an image where the template is searched for.
|
||||||
|
|
||||||
|
@param image Source image.
|
||||||
|
@param templ Template image with the size and type the same as image .
|
||||||
|
@param result Map containing comparison results ( CV_32FC1 ). If image is *W x H* and templ is *w
|
||||||
|
x h*, then result must be *W-w+1 x H-h+1*.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
virtual void match(InputArray image, InputArray templ, OutputArray result, Stream& stream = Stream::Null()) = 0;
|
virtual void match(InputArray image, InputArray templ, OutputArray result, Stream& stream = Stream::Null()) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates implementation for cuda::TemplateMatching .
|
||||||
|
|
||||||
|
@param srcType Input source type. CV_32F and CV_8U depth images (1..4 channels) are supported
|
||||||
|
for now.
|
||||||
|
@param method Specifies the way to compare the template with the image.
|
||||||
|
@param user_block_size You can use field user_block_size to set specific block size. If you
|
||||||
|
leave its default value Size(0,0) then automatic estimation of block size will be used (which is
|
||||||
|
optimized for speed). By varying user_block_size you can reduce memory requirements at the cost
|
||||||
|
of speed.
|
||||||
|
|
||||||
|
The following methods are supported for the CV_8U depth images for now:
|
||||||
|
|
||||||
|
- CV_TM_SQDIFF
|
||||||
|
- CV_TM_SQDIFF_NORMED
|
||||||
|
- CV_TM_CCORR
|
||||||
|
- CV_TM_CCORR_NORMED
|
||||||
|
- CV_TM_CCOEFF
|
||||||
|
- CV_TM_CCOEFF_NORMED
|
||||||
|
|
||||||
|
The following methods are supported for the CV_32F images for now:
|
||||||
|
|
||||||
|
- CV_TM_SQDIFF
|
||||||
|
- CV_TM_CCORR
|
||||||
|
|
||||||
|
@sa matchTemplate
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<TemplateMatching> createTemplateMatching(int srcType, int method, Size user_block_size = Size());
|
CV_EXPORTS Ptr<TemplateMatching> createTemplateMatching(int srcType, int method, Size user_block_size = Size());
|
||||||
|
|
||||||
////////////////////////// Bilateral Filter ///////////////////////////
|
////////////////////////// Bilateral Filter ///////////////////////////
|
||||||
|
|
||||||
//! Performa bilateral filtering of passsed image
|
/** @brief Performs bilateral filtering of passed image
|
||||||
|
|
||||||
|
@param src Source image. Supports only (channles != 2 && depth() != CV_8S && depth() != CV_32S
|
||||||
|
&& depth() != CV_64F).
|
||||||
|
@param dst Destination imagwe.
|
||||||
|
@param kernel_size Kernel window size.
|
||||||
|
@param sigma_color Filter sigma in the color space.
|
||||||
|
@param sigma_spatial Filter sigma in the coordinate space.
|
||||||
|
@param borderMode Border type. See borderInterpolate for details. BORDER_REFLECT101 ,
|
||||||
|
BORDER_REPLICATE , BORDER_CONSTANT , BORDER_REFLECT and BORDER_WRAP are supported for now.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa bilateralFilter
|
||||||
|
*/
|
||||||
CV_EXPORTS void bilateralFilter(InputArray src, OutputArray dst, int kernel_size, float sigma_color, float sigma_spatial,
|
CV_EXPORTS void bilateralFilter(InputArray src, OutputArray dst, int kernel_size, float sigma_color, float sigma_spatial,
|
||||||
int borderMode = BORDER_DEFAULT, Stream& stream = Stream::Null());
|
int borderMode = BORDER_DEFAULT, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
///////////////////////////// Blending ////////////////////////////////
|
///////////////////////////// Blending ////////////////////////////////
|
||||||
|
|
||||||
//! performs linear blending of two images
|
/** @brief Performs linear blending of two images.
|
||||||
//! to avoid accuracy errors sum of weigths shouldn't be very close to zero
|
|
||||||
|
@param img1 First image. Supports only CV_8U and CV_32F depth.
|
||||||
|
@param img2 Second image. Must have the same size and the same type as img1 .
|
||||||
|
@param weights1 Weights for first image. Must have tha same size as img1 . Supports only CV_32F
|
||||||
|
type.
|
||||||
|
@param weights2 Weights for second image. Must have tha same size as img2 . Supports only CV_32F
|
||||||
|
type.
|
||||||
|
@param result Destination image.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
CV_EXPORTS void blendLinear(InputArray img1, InputArray img2, InputArray weights1, InputArray weights2,
|
CV_EXPORTS void blendLinear(InputArray img1, InputArray img2, InputArray weights1, InputArray weights2,
|
||||||
OutputArray result, Stream& stream = Stream::Null());
|
OutputArray result, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDAIMGPROC_HPP__ */
|
#endif /* __OPENCV_CUDAIMGPROC_HPP__ */
|
||||||
|
@ -49,4 +49,11 @@
|
|||||||
#include "opencv2/cudalegacy/NCVHaarObjectDetection.hpp"
|
#include "opencv2/cudalegacy/NCVHaarObjectDetection.hpp"
|
||||||
#include "opencv2/cudalegacy/NCVBroxOpticalFlow.hpp"
|
#include "opencv2/cudalegacy/NCVBroxOpticalFlow.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudalegacy Legacy support
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDALEGACY_HPP__ */
|
#endif /* __OPENCV_CUDALEGACY_HPP__ */
|
||||||
|
@ -60,6 +60,8 @@
|
|||||||
//
|
//
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
|
//! @addtogroup cudalegacy
|
||||||
|
//! @{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compile-time assert namespace
|
* Compile-time assert namespace
|
||||||
@ -203,6 +205,7 @@ struct NcvPoint2D32u
|
|||||||
__host__ __device__ NcvPoint2D32u(Ncv32u x_, Ncv32u y_) : x(x_), y(y_) {}
|
__host__ __device__ NcvPoint2D32u(Ncv32u x_, Ncv32u y_) : x(x_), y(y_) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @cond IGNORED
|
||||||
|
|
||||||
NCV_CT_ASSERT(sizeof(NcvBool) <= 4);
|
NCV_CT_ASSERT(sizeof(NcvBool) <= 4);
|
||||||
NCV_CT_ASSERT(sizeof(Ncv64s) == 8);
|
NCV_CT_ASSERT(sizeof(Ncv64s) == 8);
|
||||||
@ -221,6 +224,7 @@ NCV_CT_ASSERT(sizeof(NcvRect32u) == 4 * sizeof(Ncv32u));
|
|||||||
NCV_CT_ASSERT(sizeof(NcvSize32u) == 2 * sizeof(Ncv32u));
|
NCV_CT_ASSERT(sizeof(NcvSize32u) == 2 * sizeof(Ncv32u));
|
||||||
NCV_CT_ASSERT(sizeof(NcvPoint2D32u) == 2 * sizeof(Ncv32u));
|
NCV_CT_ASSERT(sizeof(NcvPoint2D32u) == 2 * sizeof(Ncv32u));
|
||||||
|
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
//
|
//
|
||||||
@ -1023,6 +1027,6 @@ CV_EXPORTS NCVStatus ncvDrawRects_32u_device(Ncv32u *d_dst, Ncv32u dstStride, Nc
|
|||||||
NCVMatrixAlloc<type> name(alloc, width, height); \
|
NCVMatrixAlloc<type> name(alloc, width, height); \
|
||||||
ncvAssertReturn(name.isMemAllocated(), err);
|
ncvAssertReturn(name.isMemAllocated(), err);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
#endif // _ncv_hpp_
|
#endif // _ncv_hpp_
|
||||||
|
@ -62,6 +62,9 @@
|
|||||||
|
|
||||||
#include "opencv2/cudalegacy/NCV.hpp"
|
#include "opencv2/cudalegacy/NCV.hpp"
|
||||||
|
|
||||||
|
//! @addtogroup cudalegacy
|
||||||
|
//! @{
|
||||||
|
|
||||||
/// \brief Model and solver parameters
|
/// \brief Model and solver parameters
|
||||||
struct NCVBroxOpticalFlowDescriptor
|
struct NCVBroxOpticalFlowDescriptor
|
||||||
{
|
{
|
||||||
@ -89,6 +92,7 @@ struct NCVBroxOpticalFlowDescriptor
|
|||||||
/// \param [in] frame1 frame to track
|
/// \param [in] frame1 frame to track
|
||||||
/// \param [out] u flow horizontal component (along \b x axis)
|
/// \param [out] u flow horizontal component (along \b x axis)
|
||||||
/// \param [out] v flow vertical component (along \b y axis)
|
/// \param [out] v flow vertical component (along \b y axis)
|
||||||
|
/// \param stream
|
||||||
/// \return computation status
|
/// \return computation status
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -101,4 +105,6 @@ NCVStatus NCVBroxOpticalFlow(const NCVBroxOpticalFlowDescriptor desc,
|
|||||||
NCVMatrix<Ncv32f> &v,
|
NCVMatrix<Ncv32f> &v,
|
||||||
cudaStream_t stream);
|
cudaStream_t stream);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,6 +61,8 @@
|
|||||||
|
|
||||||
#include "opencv2/cudalegacy/NCV.hpp"
|
#include "opencv2/cudalegacy/NCV.hpp"
|
||||||
|
|
||||||
|
//! @addtogroup cudalegacy
|
||||||
|
//! @{
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
//
|
//
|
||||||
@ -456,6 +458,6 @@ CV_EXPORTS NCVStatus ncvHaarStoreNVBIN_host(const cv::String &filename,
|
|||||||
NCVVector<HaarClassifierNode128> &h_HaarNodes,
|
NCVVector<HaarClassifierNode128> &h_HaarNodes,
|
||||||
NCVVector<HaarFeature64> &h_HaarFeatures);
|
NCVVector<HaarFeature64> &h_HaarFeatures);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
#endif // _ncvhaarobjectdetection_hpp_
|
#endif // _ncvhaarobjectdetection_hpp_
|
||||||
|
@ -48,6 +48,8 @@
|
|||||||
#include "opencv2/cudalegacy/NCV.hpp"
|
#include "opencv2/cudalegacy/NCV.hpp"
|
||||||
#include "opencv2/core/cuda/common.hpp"
|
#include "opencv2/core/cuda/common.hpp"
|
||||||
|
|
||||||
|
//! @cond IGNORED
|
||||||
|
|
||||||
namespace cv { namespace cuda { namespace device
|
namespace cv { namespace cuda { namespace device
|
||||||
{
|
{
|
||||||
namespace pyramid
|
namespace pyramid
|
||||||
@ -106,4 +108,6 @@ private:
|
|||||||
|
|
||||||
#endif //_WIN32
|
#endif //_WIN32
|
||||||
|
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
#endif //_ncvpyramid_hpp_
|
#endif //_ncvpyramid_hpp_
|
||||||
|
@ -45,19 +45,14 @@
|
|||||||
|
|
||||||
#include "opencv2/cudalegacy/NCV.hpp"
|
#include "opencv2/cudalegacy/NCV.hpp"
|
||||||
|
|
||||||
|
//! @addtogroup cudalegacy
|
||||||
/**
|
//! @{
|
||||||
* \file NPP_staging.hpp
|
|
||||||
* NPP Staging Library
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** \defgroup core_npp NPPST Core
|
/** \defgroup core_npp NPPST Core
|
||||||
* Basic functions for CUDA streams management.
|
* Basic functions for CUDA streams management.
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an active CUDA stream used by NPPST
|
* Gets an active CUDA stream used by NPPST
|
||||||
* NOT THREAD SAFE
|
* NOT THREAD SAFE
|
||||||
@ -168,6 +163,7 @@ NCVStatus nppiStInterpolateFrames(const NppStInterpolationState *pState);
|
|||||||
* \param nSrcStep [IN] Source image line step
|
* \param nSrcStep [IN] Source image line step
|
||||||
* \param pDst [OUT] Destination image pointer (CUDA device memory)
|
* \param pDst [OUT] Destination image pointer (CUDA device memory)
|
||||||
* \param dstSize [OUT] Destination image size
|
* \param dstSize [OUT] Destination image size
|
||||||
|
* \param nDstStep
|
||||||
* \param oROI [IN] Region of interest in the source image
|
* \param oROI [IN] Region of interest in the source image
|
||||||
* \param borderType [IN] Type of border
|
* \param borderType [IN] Type of border
|
||||||
* \param pKernel [IN] Pointer to row kernel values (CUDA device memory)
|
* \param pKernel [IN] Pointer to row kernel values (CUDA device memory)
|
||||||
@ -201,6 +197,7 @@ NCVStatus nppiStFilterRowBorder_32f_C1R(const Ncv32f *pSrc,
|
|||||||
* \param nSrcStep [IN] Source image line step
|
* \param nSrcStep [IN] Source image line step
|
||||||
* \param pDst [OUT] Destination image pointer (CUDA device memory)
|
* \param pDst [OUT] Destination image pointer (CUDA device memory)
|
||||||
* \param dstSize [OUT] Destination image size
|
* \param dstSize [OUT] Destination image size
|
||||||
|
* \param nDstStep [IN]
|
||||||
* \param oROI [IN] Region of interest in the source image
|
* \param oROI [IN] Region of interest in the source image
|
||||||
* \param borderType [IN] Type of border
|
* \param borderType [IN] Type of border
|
||||||
* \param pKernel [IN] Pointer to column kernel values (CUDA device memory)
|
* \param pKernel [IN] Pointer to column kernel values (CUDA device memory)
|
||||||
@ -228,7 +225,7 @@ NCVStatus nppiStFilterColumnBorder_32f_C1R(const Ncv32f *pSrc,
|
|||||||
/** Size of buffer required for vector image warping.
|
/** Size of buffer required for vector image warping.
|
||||||
*
|
*
|
||||||
* \param srcSize [IN] Source image size
|
* \param srcSize [IN] Source image size
|
||||||
* \param nStep [IN] Source image line step
|
* \param nSrcStep [IN] Source image line step
|
||||||
* \param hpSize [OUT] Where to store computed size (host memory)
|
* \param hpSize [OUT] Where to store computed size (host memory)
|
||||||
*
|
*
|
||||||
* \return NCV status code
|
* \return NCV status code
|
||||||
@ -285,6 +282,7 @@ NCVStatus nppiStVectorWarp_PSF1x1_32f_C1(const Ncv32f *pSrc,
|
|||||||
* \param pU [IN] Pointer to horizontal displacement field (CUDA device memory)
|
* \param pU [IN] Pointer to horizontal displacement field (CUDA device memory)
|
||||||
* \param pV [IN] Pointer to vertical displacement field (CUDA device memory)
|
* \param pV [IN] Pointer to vertical displacement field (CUDA device memory)
|
||||||
* \param nVFStep [IN] Displacement field line step
|
* \param nVFStep [IN] Displacement field line step
|
||||||
|
* \param pBuffer
|
||||||
* \param timeScale [IN] Value by which displacement field will be scaled for warping
|
* \param timeScale [IN] Value by which displacement field will be scaled for warping
|
||||||
* \param pDst [OUT] Destination image pointer (CUDA device memory)
|
* \param pDst [OUT] Destination image pointer (CUDA device memory)
|
||||||
*
|
*
|
||||||
@ -903,5 +901,6 @@ NCVStatus nppsStCompact_32f_host(Ncv32f *h_src, Ncv32u srcLen,
|
|||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
#endif // _npp_staging_hpp_
|
#endif // _npp_staging_hpp_
|
||||||
|
@ -56,6 +56,8 @@
|
|||||||
|
|
||||||
#include "opencv2/cudalegacy.hpp"
|
#include "opencv2/cudalegacy.hpp"
|
||||||
|
|
||||||
|
//! @cond IGNORED
|
||||||
|
|
||||||
namespace cv { namespace cuda
|
namespace cv { namespace cuda
|
||||||
{
|
{
|
||||||
class NppStStreamHandler
|
class NppStStreamHandler
|
||||||
@ -89,4 +91,6 @@ namespace cv { namespace cuda
|
|||||||
|
|
||||||
#define ncvSafeCall(expr) cv::cuda::checkNcvError(expr, __FILE__, __LINE__, CV_Func)
|
#define ncvSafeCall(expr) cv::cuda::checkNcvError(expr, __FILE__, __LINE__, CV_Func)
|
||||||
|
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
#endif // __OPENCV_CORE_CUDALEGACY_PRIVATE_HPP__
|
#endif // __OPENCV_CORE_CUDALEGACY_PRIVATE_HPP__
|
||||||
|
@ -49,8 +49,21 @@
|
|||||||
|
|
||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudaoptflow Optical Flow
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
|
//! @addtogroup cudaoptflow
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Class computing the optical flow for two images using Brox et al Optical Flow algorithm
|
||||||
|
(@cite Brox2004). :
|
||||||
|
*/
|
||||||
class CV_EXPORTS BroxOpticalFlow
|
class CV_EXPORTS BroxOpticalFlow
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -88,16 +101,58 @@ public:
|
|||||||
GpuMat buf;
|
GpuMat buf;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Class used for calculating an optical flow.
|
||||||
|
|
||||||
|
The class can calculate an optical flow for a sparse feature set or dense optical flow using the
|
||||||
|
iterative Lucas-Kanade method with pyramids.
|
||||||
|
|
||||||
|
@sa calcOpticalFlowPyrLK
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example of the Lucas Kanade optical flow algorithm can be found at
|
||||||
|
opencv_source_code/samples/gpu/pyrlk_optical_flow.cpp
|
||||||
|
*/
|
||||||
class CV_EXPORTS PyrLKOpticalFlow
|
class CV_EXPORTS PyrLKOpticalFlow
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PyrLKOpticalFlow();
|
PyrLKOpticalFlow();
|
||||||
|
|
||||||
|
/** @brief Calculate an optical flow for a sparse feature set.
|
||||||
|
|
||||||
|
@param prevImg First 8-bit input image (supports both grayscale and color images).
|
||||||
|
@param nextImg Second input image of the same size and the same type as prevImg .
|
||||||
|
@param prevPts Vector of 2D points for which the flow needs to be found. It must be one row matrix
|
||||||
|
with CV_32FC2 type.
|
||||||
|
@param nextPts Output vector of 2D points (with single-precision floating-point coordinates)
|
||||||
|
containing the calculated new positions of input features in the second image. When useInitialFlow
|
||||||
|
is true, the vector must have the same size as in the input.
|
||||||
|
@param status Output status vector (CV_8UC1 type). Each element of the vector is set to 1 if the
|
||||||
|
flow for the corresponding features has been found. Otherwise, it is set to 0.
|
||||||
|
@param err Output vector (CV_32FC1 type) that contains the difference between patches around the
|
||||||
|
original and moved points or min eigen value if getMinEigenVals is checked. It can be NULL, if not
|
||||||
|
needed.
|
||||||
|
|
||||||
|
@sa calcOpticalFlowPyrLK
|
||||||
|
*/
|
||||||
void sparse(const GpuMat& prevImg, const GpuMat& nextImg, const GpuMat& prevPts, GpuMat& nextPts,
|
void sparse(const GpuMat& prevImg, const GpuMat& nextImg, const GpuMat& prevPts, GpuMat& nextPts,
|
||||||
GpuMat& status, GpuMat* err = 0);
|
GpuMat& status, GpuMat* err = 0);
|
||||||
|
|
||||||
|
/** @brief Calculate dense optical flow.
|
||||||
|
|
||||||
|
@param prevImg First 8-bit grayscale input image.
|
||||||
|
@param nextImg Second input image of the same size and the same type as prevImg .
|
||||||
|
@param u Horizontal component of the optical flow of the same size as input images, 32-bit
|
||||||
|
floating-point, single-channel
|
||||||
|
@param v Vertical component of the optical flow of the same size as input images, 32-bit
|
||||||
|
floating-point, single-channel
|
||||||
|
@param err Output vector (CV_32FC1 type) that contains the difference between patches around the
|
||||||
|
original and moved points or min eigen value if getMinEigenVals is checked. It can be NULL, if not
|
||||||
|
needed.
|
||||||
|
*/
|
||||||
void dense(const GpuMat& prevImg, const GpuMat& nextImg, GpuMat& u, GpuMat& v, GpuMat* err = 0);
|
void dense(const GpuMat& prevImg, const GpuMat& nextImg, GpuMat& u, GpuMat& v, GpuMat* err = 0);
|
||||||
|
|
||||||
|
/** @brief Releases inner buffers memory.
|
||||||
|
*/
|
||||||
void releaseMemory();
|
void releaseMemory();
|
||||||
|
|
||||||
Size winSize;
|
Size winSize;
|
||||||
@ -115,6 +170,8 @@ private:
|
|||||||
GpuMat vPyr_[2];
|
GpuMat vPyr_[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Class computing a dense optical flow using the Gunnar Farneback’s algorithm. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS FarnebackOpticalFlow
|
class CV_EXPORTS FarnebackOpticalFlow
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -139,8 +196,20 @@ public:
|
|||||||
double polySigma;
|
double polySigma;
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
|
/** @brief Computes a dense optical flow using the Gunnar Farneback’s algorithm.
|
||||||
|
|
||||||
|
@param frame0 First 8-bit gray-scale input image
|
||||||
|
@param frame1 Second 8-bit gray-scale input image
|
||||||
|
@param flowx Flow horizontal component
|
||||||
|
@param flowy Flow vertical component
|
||||||
|
@param s Stream
|
||||||
|
|
||||||
|
@sa calcOpticalFlowFarneback
|
||||||
|
*/
|
||||||
void operator ()(const GpuMat &frame0, const GpuMat &frame1, GpuMat &flowx, GpuMat &flowy, Stream &s = Stream::Null());
|
void operator ()(const GpuMat &frame0, const GpuMat &frame1, GpuMat &flowx, GpuMat &flowy, Stream &s = Stream::Null());
|
||||||
|
|
||||||
|
/** @brief Releases unused auxiliary memory buffers.
|
||||||
|
*/
|
||||||
void releaseMemory()
|
void releaseMemory()
|
||||||
{
|
{
|
||||||
frames_[0].release();
|
frames_[0].release();
|
||||||
@ -295,20 +364,22 @@ private:
|
|||||||
GpuMat extended_I1;
|
GpuMat extended_I1;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Interpolate frames (images) using provided optical flow (displacement field).
|
/** @brief Interpolates frames (images) using provided optical flow (displacement field).
|
||||||
//! frame0 - frame 0 (32-bit floating point images, single channel)
|
|
||||||
//! frame1 - frame 1 (the same type and size)
|
@param frame0 First frame (32-bit floating point images, single channel).
|
||||||
//! fu - forward horizontal displacement
|
@param frame1 Second frame. Must have the same type and size as frame0 .
|
||||||
//! fv - forward vertical displacement
|
@param fu Forward horizontal displacement.
|
||||||
//! bu - backward horizontal displacement
|
@param fv Forward vertical displacement.
|
||||||
//! bv - backward vertical displacement
|
@param bu Backward horizontal displacement.
|
||||||
//! pos - new frame position
|
@param bv Backward vertical displacement.
|
||||||
//! newFrame - new frame
|
@param pos New frame position.
|
||||||
//! buf - temporary buffer, will have width x 6*height size, CV_32FC1 type and contain 6 GpuMat;
|
@param newFrame Output image.
|
||||||
//! occlusion masks 0, occlusion masks 1,
|
@param buf Temporary buffer, will have width x 6\*height size, CV_32FC1 type and contain 6
|
||||||
//! interpolated forward flow 0, interpolated forward flow 1,
|
GpuMat: occlusion masks for first frame, occlusion masks for second, interpolated forward
|
||||||
//! interpolated backward flow 0, interpolated backward flow 1
|
horizontal flow, interpolated forward vertical flow, interpolated backward horizontal flow,
|
||||||
//!
|
interpolated backward vertical flow.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
CV_EXPORTS void interpolateFrames(const GpuMat& frame0, const GpuMat& frame1,
|
CV_EXPORTS void interpolateFrames(const GpuMat& frame0, const GpuMat& frame1,
|
||||||
const GpuMat& fu, const GpuMat& fv,
|
const GpuMat& fu, const GpuMat& fv,
|
||||||
const GpuMat& bu, const GpuMat& bv,
|
const GpuMat& bu, const GpuMat& bv,
|
||||||
@ -317,6 +388,8 @@ CV_EXPORTS void interpolateFrames(const GpuMat& frame0, const GpuMat& frame1,
|
|||||||
|
|
||||||
CV_EXPORTS void createOpticalFlowNeedleMap(const GpuMat& u, const GpuMat& v, GpuMat& vertex, GpuMat& colors);
|
CV_EXPORTS void createOpticalFlowNeedleMap(const GpuMat& u, const GpuMat& v, GpuMat& vertex, GpuMat& colors);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDAOPTFLOW_HPP__ */
|
#endif /* __OPENCV_CUDAOPTFLOW_HPP__ */
|
||||||
|
@ -50,11 +50,25 @@
|
|||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
#include "opencv2/calib3d.hpp"
|
#include "opencv2/calib3d.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudastereo Stereo Correspondence
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
|
//! @addtogroup cudastereo
|
||||||
|
//! @{
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
// StereoBM
|
// StereoBM
|
||||||
|
|
||||||
|
/** @brief Class computing stereo correspondence (disparity map) using the block matching algorithm. :
|
||||||
|
|
||||||
|
@sa StereoBM
|
||||||
|
*/
|
||||||
class CV_EXPORTS StereoBM : public cv::StereoBM
|
class CV_EXPORTS StereoBM : public cv::StereoBM
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -63,20 +77,70 @@ public:
|
|||||||
virtual void compute(InputArray left, InputArray right, OutputArray disparity, Stream& stream) = 0;
|
virtual void compute(InputArray left, InputArray right, OutputArray disparity, Stream& stream) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates StereoBM object.
|
||||||
|
|
||||||
|
@param numDisparities the disparity search range. For each pixel algorithm will find the best
|
||||||
|
disparity from 0 (default minimum disparity) to numDisparities. The search range can then be
|
||||||
|
shifted by changing the minimum disparity.
|
||||||
|
@param blockSize the linear size of the blocks compared by the algorithm. The size should be odd
|
||||||
|
(as the block is centered at the current pixel). Larger block size implies smoother, though less
|
||||||
|
accurate disparity map. Smaller block size gives more detailed disparity map, but there is higher
|
||||||
|
chance for algorithm to find a wrong correspondence.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::StereoBM> createStereoBM(int numDisparities = 64, int blockSize = 19);
|
CV_EXPORTS Ptr<cuda::StereoBM> createStereoBM(int numDisparities = 64, int blockSize = 19);
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
// StereoBeliefPropagation
|
// StereoBeliefPropagation
|
||||||
|
|
||||||
//! "Efficient Belief Propagation for Early Vision" P.Felzenszwalb
|
/** @brief Class computing stereo correspondence using the belief propagation algorithm. :
|
||||||
|
|
||||||
|
The class implements algorithm described in @cite Felzenszwalb2006 . It can compute own data cost
|
||||||
|
(using a truncated linear model) or use a user-provided data cost.
|
||||||
|
|
||||||
|
@note
|
||||||
|
StereoBeliefPropagation requires a lot of memory for message storage:
|
||||||
|
|
||||||
|
\f[width \_ step \cdot height \cdot ndisp \cdot 4 \cdot (1 + 0.25)\f]
|
||||||
|
|
||||||
|
and for data cost storage:
|
||||||
|
|
||||||
|
\f[width\_step \cdot height \cdot ndisp \cdot (1 + 0.25 + 0.0625 + \dotsm + \frac{1}{4^{levels}})\f]
|
||||||
|
|
||||||
|
width_step is the number of bytes in a line including padding.
|
||||||
|
|
||||||
|
StereoBeliefPropagation uses a truncated linear model for the data cost and discontinuity terms:
|
||||||
|
|
||||||
|
\f[DataCost = data \_ weight \cdot \min ( \lvert Img_Left(x,y)-Img_Right(x-d,y) \rvert , max \_ data \_ term)\f]
|
||||||
|
|
||||||
|
\f[DiscTerm = \min (disc \_ single \_ jump \cdot \lvert f_1-f_2 \rvert , max \_ disc \_ term)\f]
|
||||||
|
|
||||||
|
For more details, see @cite Felzenszwalb2006 .
|
||||||
|
|
||||||
|
By default, StereoBeliefPropagation uses floating-point arithmetics and the CV_32FC1 type for
|
||||||
|
messages. But it can also use fixed-point arithmetics and the CV_16SC1 message type for better
|
||||||
|
performance. To avoid an overflow in this case, the parameters must satisfy the following
|
||||||
|
requirement:
|
||||||
|
|
||||||
|
\f[10 \cdot 2^{levels-1} \cdot max \_ data \_ term < SHRT \_ MAX\f]
|
||||||
|
|
||||||
|
@sa StereoMatcher
|
||||||
|
*/
|
||||||
class CV_EXPORTS StereoBeliefPropagation : public cv::StereoMatcher
|
class CV_EXPORTS StereoBeliefPropagation : public cv::StereoMatcher
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using cv::StereoMatcher::compute;
|
using cv::StereoMatcher::compute;
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
virtual void compute(InputArray left, InputArray right, OutputArray disparity, Stream& stream) = 0;
|
virtual void compute(InputArray left, InputArray right, OutputArray disparity, Stream& stream) = 0;
|
||||||
|
|
||||||
//! version for user specified data term
|
/** @brief Enables the stereo correspondence operator that finds the disparity for the specified data cost.
|
||||||
|
|
||||||
|
@param data User-specified data cost, a matrix of msg_type type and
|
||||||
|
Size(\<image columns\>\*ndisp, \<image rows\>) size.
|
||||||
|
@param disparity Output disparity map. If disparity is empty, the output type is CV_16SC1 .
|
||||||
|
Otherwise, the type is retained.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
virtual void compute(InputArray data, OutputArray disparity, Stream& stream = Stream::Null()) = 0;
|
virtual void compute(InputArray data, OutputArray disparity, Stream& stream = Stream::Null()) = 0;
|
||||||
|
|
||||||
//! number of BP iterations on each level
|
//! number of BP iterations on each level
|
||||||
@ -107,18 +171,48 @@ public:
|
|||||||
virtual int getMsgType() const = 0;
|
virtual int getMsgType() const = 0;
|
||||||
virtual void setMsgType(int msg_type) = 0;
|
virtual void setMsgType(int msg_type) = 0;
|
||||||
|
|
||||||
|
/** @brief Uses a heuristic method to compute the recommended parameters ( ndisp, iters and levels ) for the
|
||||||
|
specified image size ( width and height ).
|
||||||
|
*/
|
||||||
static void estimateRecommendedParams(int width, int height, int& ndisp, int& iters, int& levels);
|
static void estimateRecommendedParams(int width, int height, int& ndisp, int& iters, int& levels);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates StereoBeliefPropagation object.
|
||||||
|
|
||||||
|
@param ndisp Number of disparities.
|
||||||
|
@param iters Number of BP iterations on each level.
|
||||||
|
@param levels Number of levels.
|
||||||
|
@param msg_type Type for messages. CV_16SC1 and CV_32FC1 types are supported.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::StereoBeliefPropagation>
|
CV_EXPORTS Ptr<cuda::StereoBeliefPropagation>
|
||||||
createStereoBeliefPropagation(int ndisp = 64, int iters = 5, int levels = 5, int msg_type = CV_32F);
|
createStereoBeliefPropagation(int ndisp = 64, int iters = 5, int levels = 5, int msg_type = CV_32F);
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
// StereoConstantSpaceBP
|
// StereoConstantSpaceBP
|
||||||
|
|
||||||
//! "A Constant-Space Belief Propagation Algorithm for Stereo Matching"
|
/** @brief Class computing stereo correspondence using the constant space belief propagation algorithm. :
|
||||||
//! Qingxiong Yang, Liang Wang, Narendra Ahuja
|
|
||||||
//! http://vision.ai.uiuc.edu/~qyang6/
|
The class implements algorithm described in @cite Yang2010 . StereoConstantSpaceBP supports both local
|
||||||
|
minimum and global minimum data cost initialization algorithms. For more details, see the paper
|
||||||
|
mentioned above. By default, a local algorithm is used. To enable a global algorithm, set
|
||||||
|
use_local_init_data_cost to false .
|
||||||
|
|
||||||
|
StereoConstantSpaceBP uses a truncated linear model for the data cost and discontinuity terms:
|
||||||
|
|
||||||
|
\f[DataCost = data \_ weight \cdot \min ( \lvert I_2-I_1 \rvert , max \_ data \_ term)\f]
|
||||||
|
|
||||||
|
\f[DiscTerm = \min (disc \_ single \_ jump \cdot \lvert f_1-f_2 \rvert , max \_ disc \_ term)\f]
|
||||||
|
|
||||||
|
For more details, see @cite Yang2010 .
|
||||||
|
|
||||||
|
By default, StereoConstantSpaceBP uses floating-point arithmetics and the CV_32FC1 type for
|
||||||
|
messages. But it can also use fixed-point arithmetics and the CV_16SC1 message type for better
|
||||||
|
performance. To avoid an overflow in this case, the parameters must satisfy the following
|
||||||
|
requirement:
|
||||||
|
|
||||||
|
\f[10 \cdot 2^{levels-1} \cdot max \_ data \_ term < SHRT \_ MAX\f]
|
||||||
|
|
||||||
|
*/
|
||||||
class CV_EXPORTS StereoConstantSpaceBP : public cuda::StereoBeliefPropagation
|
class CV_EXPORTS StereoConstantSpaceBP : public cuda::StereoBeliefPropagation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -129,23 +223,40 @@ public:
|
|||||||
virtual bool getUseLocalInitDataCost() const = 0;
|
virtual bool getUseLocalInitDataCost() const = 0;
|
||||||
virtual void setUseLocalInitDataCost(bool use_local_init_data_cost) = 0;
|
virtual void setUseLocalInitDataCost(bool use_local_init_data_cost) = 0;
|
||||||
|
|
||||||
|
/** @brief Uses a heuristic method to compute parameters (ndisp, iters, levelsand nrplane) for the specified
|
||||||
|
image size (widthand height).
|
||||||
|
*/
|
||||||
static void estimateRecommendedParams(int width, int height, int& ndisp, int& iters, int& levels, int& nr_plane);
|
static void estimateRecommendedParams(int width, int height, int& ndisp, int& iters, int& levels, int& nr_plane);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates StereoConstantSpaceBP object.
|
||||||
|
|
||||||
|
@param ndisp Number of disparities.
|
||||||
|
@param iters Number of BP iterations on each level.
|
||||||
|
@param levels Number of levels.
|
||||||
|
@param nr_plane Number of disparity levels on the first level.
|
||||||
|
@param msg_type Type for messages. CV_16SC1 and CV_32FC1 types are supported.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::StereoConstantSpaceBP>
|
CV_EXPORTS Ptr<cuda::StereoConstantSpaceBP>
|
||||||
createStereoConstantSpaceBP(int ndisp = 128, int iters = 8, int levels = 4, int nr_plane = 4, int msg_type = CV_32F);
|
createStereoConstantSpaceBP(int ndisp = 128, int iters = 8, int levels = 4, int nr_plane = 4, int msg_type = CV_32F);
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
// DisparityBilateralFilter
|
// DisparityBilateralFilter
|
||||||
|
|
||||||
//! Disparity map refinement using joint bilateral filtering given a single color image.
|
/** @brief Class refining a disparity map using joint bilateral filtering. :
|
||||||
//! Qingxiong Yang, Liang Wang, Narendra Ahuja
|
|
||||||
//! http://vision.ai.uiuc.edu/~qyang6/
|
The class implements @cite Yang2010 algorithm.
|
||||||
|
*/
|
||||||
class CV_EXPORTS DisparityBilateralFilter : public cv::Algorithm
|
class CV_EXPORTS DisparityBilateralFilter : public cv::Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! the disparity map refinement operator. Refine disparity map using joint bilateral filtering given a single color image.
|
/** @brief Refines a disparity map using joint bilateral filtering.
|
||||||
//! disparity must have CV_8U or CV_16S type, image must have CV_8UC1 or CV_8UC3 type.
|
|
||||||
|
@param disparity Input disparity map. CV_8UC1 and CV_16SC1 types are supported.
|
||||||
|
@param image Input image. CV_8UC1 and CV_8UC3 types are supported.
|
||||||
|
@param dst Destination disparity map. It has the same size and type as disparity .
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
virtual void apply(InputArray disparity, InputArray image, OutputArray dst, Stream& stream = Stream::Null()) = 0;
|
virtual void apply(InputArray disparity, InputArray image, OutputArray dst, Stream& stream = Stream::Null()) = 0;
|
||||||
|
|
||||||
virtual int getNumDisparities() const = 0;
|
virtual int getNumDisparities() const = 0;
|
||||||
@ -170,24 +281,48 @@ public:
|
|||||||
virtual void setSigmaRange(double sigma_range) = 0;
|
virtual void setSigmaRange(double sigma_range) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates DisparityBilateralFilter object.
|
||||||
|
|
||||||
|
@param ndisp Number of disparities.
|
||||||
|
@param radius Filter radius.
|
||||||
|
@param iters Number of iterations.
|
||||||
|
*/
|
||||||
CV_EXPORTS Ptr<cuda::DisparityBilateralFilter>
|
CV_EXPORTS Ptr<cuda::DisparityBilateralFilter>
|
||||||
createDisparityBilateralFilter(int ndisp = 64, int radius = 3, int iters = 1);
|
createDisparityBilateralFilter(int ndisp = 64, int radius = 3, int iters = 1);
|
||||||
|
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
// Utility
|
// Utility
|
||||||
|
|
||||||
//! Reprojects disparity image to 3D space.
|
/** @brief Reprojects a disparity image to 3D space.
|
||||||
//! Supports CV_8U and CV_16S types of input disparity.
|
|
||||||
//! The output is a 3- or 4-channel floating-point matrix.
|
@param disp Input disparity image. CV_8U and CV_16S types are supported.
|
||||||
//! Each element of this matrix will contain the 3D coordinates of the point (x,y,z,1), computed from the disparity map.
|
@param xyzw Output 3- or 4-channel floating-point image of the same size as disp . Each element of
|
||||||
//! Q is the 4x4 perspective transformation matrix that can be obtained with cvStereoRectify.
|
xyzw(x,y) contains 3D coordinates (x,y,z) or (x,y,z,1) of the point (x,y) , computed from the
|
||||||
|
disparity map.
|
||||||
|
@param Q \f$4 \times 4\f$ perspective transformation matrix that can be obtained via stereoRectify .
|
||||||
|
@param dst_cn The number of channels for output image. Can be 3 or 4.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa reprojectImageTo3D
|
||||||
|
*/
|
||||||
CV_EXPORTS void reprojectImageTo3D(InputArray disp, OutputArray xyzw, InputArray Q, int dst_cn = 4, Stream& stream = Stream::Null());
|
CV_EXPORTS void reprojectImageTo3D(InputArray disp, OutputArray xyzw, InputArray Q, int dst_cn = 4, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! Does coloring of disparity image: [0..ndisp) -> [0..240, 1, 1] in HSV.
|
/** @brief Colors a disparity image.
|
||||||
//! Supported types of input disparity: CV_8U, CV_16S.
|
|
||||||
//! Output disparity has CV_8UC4 type in BGRA format (alpha = 255).
|
@param src_disp Source disparity image. CV_8UC1 and CV_16SC1 types are supported.
|
||||||
|
@param dst_disp Output disparity image. It has the same size as src_disp . The type is CV_8UC4
|
||||||
|
in BGRA format (alpha = 255).
|
||||||
|
@param ndisp Number of disparities.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
This function draws a colored disparity map by converting disparity values from [0..ndisp) interval
|
||||||
|
first to HSV color space (where different disparity values correspond to different hues) and then
|
||||||
|
converting the pixels to RGB for visualization.
|
||||||
|
*/
|
||||||
CV_EXPORTS void drawColorDisp(InputArray src_disp, OutputArray dst_disp, int ndisp, Stream& stream = Stream::Null());
|
CV_EXPORTS void drawColorDisp(InputArray src_disp, OutputArray dst_disp, int ndisp, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDASTEREO_HPP__ */
|
#endif /* __OPENCV_CUDASTEREO_HPP__ */
|
||||||
|
@ -50,54 +50,178 @@
|
|||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
#include "opencv2/imgproc.hpp"
|
#include "opencv2/imgproc.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudawarping Image Warping
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv { namespace cuda {
|
namespace cv { namespace cuda {
|
||||||
|
|
||||||
//! DST[x,y] = SRC[xmap[x,y],ymap[x,y]]
|
//! @addtogroup cudawarping
|
||||||
//! supports only CV_32FC1 map type
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Applies a generic geometrical transformation to an image.
|
||||||
|
|
||||||
|
@param src Source image.
|
||||||
|
@param dst Destination image with the size the same as xmap and the type the same as src .
|
||||||
|
@param xmap X values. Only CV_32FC1 type is supported.
|
||||||
|
@param ymap Y values. Only CV_32FC1 type is supported.
|
||||||
|
@param interpolation Interpolation method (see resize ). INTER_NEAREST , INTER_LINEAR and
|
||||||
|
INTER_CUBIC are supported for now.
|
||||||
|
@param borderMode Pixel extrapolation method (see borderInterpolate ). BORDER_REFLECT101 ,
|
||||||
|
BORDER_REPLICATE , BORDER_CONSTANT , BORDER_REFLECT and BORDER_WRAP are supported for now.
|
||||||
|
@param borderValue Value used in case of a constant border. By default, it is 0.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
The function transforms the source image using the specified map:
|
||||||
|
|
||||||
|
\f[\texttt{dst} (x,y) = \texttt{src} (xmap(x,y), ymap(x,y))\f]
|
||||||
|
|
||||||
|
Values of pixels with non-integer coordinates are computed using the bilinear interpolation.
|
||||||
|
|
||||||
|
@sa remap
|
||||||
|
*/
|
||||||
CV_EXPORTS void remap(InputArray src, OutputArray dst, InputArray xmap, InputArray ymap,
|
CV_EXPORTS void remap(InputArray src, OutputArray dst, InputArray xmap, InputArray ymap,
|
||||||
int interpolation, int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(),
|
int interpolation, int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(),
|
||||||
Stream& stream = Stream::Null());
|
Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! resizes the image
|
/** @brief Resizes an image.
|
||||||
//! Supports INTER_NEAREST, INTER_LINEAR, INTER_CUBIC, INTER_AREA
|
|
||||||
|
@param src Source image.
|
||||||
|
@param dst Destination image with the same type as src . The size is dsize (when it is non-zero)
|
||||||
|
or the size is computed from src.size() , fx , and fy .
|
||||||
|
@param dsize Destination image size. If it is zero, it is computed as:
|
||||||
|
\f[\texttt{dsize = Size(round(fx*src.cols), round(fy*src.rows))}\f]
|
||||||
|
Either dsize or both fx and fy must be non-zero.
|
||||||
|
@param fx Scale factor along the horizontal axis. If it is zero, it is computed as:
|
||||||
|
\f[\texttt{(double)dsize.width/src.cols}\f]
|
||||||
|
@param fy Scale factor along the vertical axis. If it is zero, it is computed as:
|
||||||
|
\f[\texttt{(double)dsize.height/src.rows}\f]
|
||||||
|
@param interpolation Interpolation method. INTER_NEAREST , INTER_LINEAR and INTER_CUBIC are
|
||||||
|
supported for now.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa resize
|
||||||
|
*/
|
||||||
CV_EXPORTS void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation = INTER_LINEAR, Stream& stream = Stream::Null());
|
CV_EXPORTS void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation = INTER_LINEAR, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! warps the image using affine transformation
|
/** @brief Applies an affine transformation to an image.
|
||||||
//! Supports INTER_NEAREST, INTER_LINEAR, INTER_CUBIC
|
|
||||||
|
@param src Source image. CV_8U , CV_16U , CV_32S , or CV_32F depth and 1, 3, or 4 channels are
|
||||||
|
supported.
|
||||||
|
@param dst Destination image with the same type as src . The size is dsize .
|
||||||
|
@param M *2x3* transformation matrix.
|
||||||
|
@param dsize Size of the destination image.
|
||||||
|
@param flags Combination of interpolation methods (see resize) and the optional flag
|
||||||
|
WARP_INVERSE_MAP specifying that M is an inverse transformation ( dst=\>src ). Only
|
||||||
|
INTER_NEAREST , INTER_LINEAR , and INTER_CUBIC interpolation methods are supported.
|
||||||
|
@param borderMode
|
||||||
|
@param borderValue
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa warpAffine
|
||||||
|
*/
|
||||||
CV_EXPORTS void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR,
|
CV_EXPORTS void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR,
|
||||||
int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(), Stream& stream = Stream::Null());
|
int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @brief Builds transformation maps for affine transformation.
|
||||||
|
|
||||||
|
@param M *2x3* transformation matrix.
|
||||||
|
@param inverse Flag specifying that M is an inverse transformation ( dst=\>src ).
|
||||||
|
@param dsize Size of the destination image.
|
||||||
|
@param xmap X values with CV_32FC1 type.
|
||||||
|
@param ymap Y values with CV_32FC1 type.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa cuda::warpAffine , cuda::remap
|
||||||
|
*/
|
||||||
CV_EXPORTS void buildWarpAffineMaps(InputArray M, bool inverse, Size dsize, OutputArray xmap, OutputArray ymap, Stream& stream = Stream::Null());
|
CV_EXPORTS void buildWarpAffineMaps(InputArray M, bool inverse, Size dsize, OutputArray xmap, OutputArray ymap, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! warps the image using perspective transformation
|
/** @brief Applies a perspective transformation to an image.
|
||||||
//! Supports INTER_NEAREST, INTER_LINEAR, INTER_CUBIC
|
|
||||||
|
@param src Source image. CV_8U , CV_16U , CV_32S , or CV_32F depth and 1, 3, or 4 channels are
|
||||||
|
supported.
|
||||||
|
@param dst Destination image with the same type as src . The size is dsize .
|
||||||
|
@param M *3x3* transformation matrix.
|
||||||
|
@param dsize Size of the destination image.
|
||||||
|
@param flags Combination of interpolation methods (see resize ) and the optional flag
|
||||||
|
WARP_INVERSE_MAP specifying that M is the inverse transformation ( dst =\> src ). Only
|
||||||
|
INTER_NEAREST , INTER_LINEAR , and INTER_CUBIC interpolation methods are supported.
|
||||||
|
@param borderMode
|
||||||
|
@param borderValue
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa warpPerspective
|
||||||
|
*/
|
||||||
CV_EXPORTS void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR,
|
CV_EXPORTS void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR,
|
||||||
int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(), Stream& stream = Stream::Null());
|
int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(), Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
/** @brief Builds transformation maps for perspective transformation.
|
||||||
|
|
||||||
|
@param M *3x3* transformation matrix.
|
||||||
|
@param inverse Flag specifying that M is an inverse transformation ( dst=\>src ).
|
||||||
|
@param dsize Size of the destination image.
|
||||||
|
@param xmap X values with CV_32FC1 type.
|
||||||
|
@param ymap Y values with CV_32FC1 type.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa cuda::warpPerspective , cuda::remap
|
||||||
|
*/
|
||||||
CV_EXPORTS void buildWarpPerspectiveMaps(InputArray M, bool inverse, Size dsize, OutputArray xmap, OutputArray ymap, Stream& stream = Stream::Null());
|
CV_EXPORTS void buildWarpPerspectiveMaps(InputArray M, bool inverse, Size dsize, OutputArray xmap, OutputArray ymap, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! builds plane warping maps
|
/** @brief Builds plane warping maps.
|
||||||
|
*/
|
||||||
CV_EXPORTS void buildWarpPlaneMaps(Size src_size, Rect dst_roi, InputArray K, InputArray R, InputArray T, float scale,
|
CV_EXPORTS void buildWarpPlaneMaps(Size src_size, Rect dst_roi, InputArray K, InputArray R, InputArray T, float scale,
|
||||||
OutputArray map_x, OutputArray map_y, Stream& stream = Stream::Null());
|
OutputArray map_x, OutputArray map_y, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! builds cylindrical warping maps
|
/** @brief Builds cylindrical warping maps.
|
||||||
|
*/
|
||||||
CV_EXPORTS void buildWarpCylindricalMaps(Size src_size, Rect dst_roi, InputArray K, InputArray R, float scale,
|
CV_EXPORTS void buildWarpCylindricalMaps(Size src_size, Rect dst_roi, InputArray K, InputArray R, float scale,
|
||||||
OutputArray map_x, OutputArray map_y, Stream& stream = Stream::Null());
|
OutputArray map_x, OutputArray map_y, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! builds spherical warping maps
|
/** @brief Builds spherical warping maps.
|
||||||
|
*/
|
||||||
CV_EXPORTS void buildWarpSphericalMaps(Size src_size, Rect dst_roi, InputArray K, InputArray R, float scale,
|
CV_EXPORTS void buildWarpSphericalMaps(Size src_size, Rect dst_roi, InputArray K, InputArray R, float scale,
|
||||||
OutputArray map_x, OutputArray map_y, Stream& stream = Stream::Null());
|
OutputArray map_x, OutputArray map_y, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! rotates an image around the origin (0,0) and then shifts it
|
/** @brief Rotates an image around the origin (0,0) and then shifts it.
|
||||||
//! supports INTER_NEAREST, INTER_LINEAR, INTER_CUBIC
|
|
||||||
//! supports 1, 3 or 4 channels images with CV_8U, CV_16U or CV_32F depth
|
@param src Source image. Supports 1, 3 or 4 channels images with CV_8U , CV_16U or CV_32F
|
||||||
|
depth.
|
||||||
|
@param dst Destination image with the same type as src . The size is dsize .
|
||||||
|
@param dsize Size of the destination image.
|
||||||
|
@param angle Angle of rotation in degrees.
|
||||||
|
@param xShift Shift along the horizontal axis.
|
||||||
|
@param yShift Shift along the vertical axis.
|
||||||
|
@param interpolation Interpolation method. Only INTER_NEAREST , INTER_LINEAR , and INTER_CUBIC
|
||||||
|
are supported.
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa cuda::warpAffine
|
||||||
|
*/
|
||||||
CV_EXPORTS void rotate(InputArray src, OutputArray dst, Size dsize, double angle, double xShift = 0, double yShift = 0,
|
CV_EXPORTS void rotate(InputArray src, OutputArray dst, Size dsize, double angle, double xShift = 0, double yShift = 0,
|
||||||
int interpolation = INTER_LINEAR, Stream& stream = Stream::Null());
|
int interpolation = INTER_LINEAR, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! smoothes the source image and downsamples it
|
/** @brief Smoothes an image and downsamples it.
|
||||||
|
|
||||||
|
@param src Source image.
|
||||||
|
@param dst Destination image. Will have Size((src.cols+1)/2, (src.rows+1)/2) size and the same
|
||||||
|
type as src .
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
|
||||||
|
@sa pyrDown
|
||||||
|
*/
|
||||||
CV_EXPORTS void pyrDown(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
|
CV_EXPORTS void pyrDown(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
//! upsamples the source image and then smoothes it
|
/** @brief Upsamples an image and then smoothes it.
|
||||||
|
|
||||||
|
@param src Source image.
|
||||||
|
@param dst Destination image. Will have Size(src.cols\*2, src.rows\*2) size and the same type as
|
||||||
|
src .
|
||||||
|
@param stream Stream for the asynchronous version.
|
||||||
|
*/
|
||||||
CV_EXPORTS void pyrUp(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
|
CV_EXPORTS void pyrUp(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
class CV_EXPORTS ImagePyramid : public Algorithm
|
class CV_EXPORTS ImagePyramid : public Algorithm
|
||||||
@ -108,6 +232,8 @@ public:
|
|||||||
|
|
||||||
CV_EXPORTS Ptr<ImagePyramid> createImagePyramid(InputArray img, int nLayers = -1, Stream& stream = Stream::Null());
|
CV_EXPORTS Ptr<ImagePyramid> createImagePyramid(InputArray img, int nLayers = -1, Stream& stream = Stream::Null());
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}} // namespace cv { namespace cuda {
|
}} // namespace cv { namespace cuda {
|
||||||
|
|
||||||
#endif /* __OPENCV_CUDAWARPING_HPP__ */
|
#endif /* __OPENCV_CUDAWARPING_HPP__ */
|
||||||
|
@ -109,4 +109,11 @@
|
|||||||
#include "cudev/expr/unary_op.hpp"
|
#include "cudev/expr/unary_op.hpp"
|
||||||
#include "cudev/expr/warping.hpp"
|
#include "cudev/expr/warping.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@addtogroup cuda
|
||||||
|
@{
|
||||||
|
@defgroup cudev Device layer
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
struct Block
|
struct Block
|
||||||
{
|
{
|
||||||
__device__ __forceinline__ static uint blockId()
|
__device__ __forceinline__ static uint blockId()
|
||||||
@ -122,6 +125,9 @@ __device__ __forceinline__ static void blockTransfrom(InIt1 beg1, InIt1 end1, In
|
|||||||
for(; t1 < end1; t1 += STRIDE, t2 += STRIDE, o += STRIDE)
|
for(; t1 < end1; t1 += STRIDE, t2 += STRIDE, o += STRIDE)
|
||||||
*o = op(*t1, *t2);
|
*o = op(*t1, *t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class T> struct DynamicSharedMem
|
template <class T> struct DynamicSharedMem
|
||||||
{
|
{
|
||||||
__device__ __forceinline__ operator T*()
|
__device__ __forceinline__ operator T*()
|
||||||
@ -81,6 +84,8 @@ template <> struct DynamicSharedMem<double>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// blockReduce
|
// blockReduce
|
||||||
|
|
||||||
template <int N, typename T, class Op>
|
template <int N, typename T, class Op>
|
||||||
@ -123,6 +126,8 @@ __device__ __forceinline__ void blockReduceKeyVal(const tuple<KP0, KP1, KP2, KP3
|
|||||||
>(skeys, key, svals, val, tid, cmp);
|
>(skeys, key, svals, val, tid, cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <int THREADS_NUM, typename T>
|
template <int THREADS_NUM, typename T>
|
||||||
__device__ T blockScanInclusive(T data, volatile T* smem, uint tid)
|
__device__ T blockScanInclusive(T data, volatile T* smem, uint tid)
|
||||||
{
|
{
|
||||||
@ -96,6 +99,8 @@ __device__ __forceinline__ T blockScanExclusive(T data, volatile T* smem, uint t
|
|||||||
return blockScanInclusive<THREADS_NUM>(data, smem, tid) - data;
|
return blockScanInclusive<THREADS_NUM>(data, smem, tid) - data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// NormL1
|
// NormL1
|
||||||
|
|
||||||
template <typename T> struct NormL1
|
template <typename T> struct NormL1
|
||||||
@ -179,6 +182,8 @@ struct NormHamming
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,6 +52,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
using namespace cv::cuda;
|
using namespace cv::cuda;
|
||||||
|
|
||||||
// CV_CUDEV_ARCH
|
// CV_CUDEV_ARCH
|
||||||
@ -84,6 +87,8 @@ __host__ __device__ __forceinline__ int divUp(int total, int grain)
|
|||||||
#define CV_PI_F ((float)CV_PI)
|
#define CV_PI_F ((float)CV_PI)
|
||||||
#define CV_LOG2_F ((float)CV_LOG2)
|
#define CV_LOG2_F ((float)CV_LOG2)
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,6 +55,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
#define CV_CUDEV_EXPR_BINARY_FUNC(name) \
|
#define CV_CUDEV_EXPR_BINARY_FUNC(name) \
|
||||||
template <class SrcPtr1, class SrcPtr2> \
|
template <class SrcPtr1, class SrcPtr2> \
|
||||||
__host__ Expr<BinaryTransformPtrSz<typename PtrTraits<SrcPtr1>::ptr_type, typename PtrTraits<SrcPtr2>::ptr_type, name ## _func<typename LargerType<typename PtrTraits<SrcPtr1>::value_type, typename PtrTraits<SrcPtr2>::value_type>::type> > > \
|
__host__ Expr<BinaryTransformPtrSz<typename PtrTraits<SrcPtr1>::ptr_type, typename PtrTraits<SrcPtr2>::ptr_type, name ## _func<typename LargerType<typename PtrTraits<SrcPtr1>::value_type, typename PtrTraits<SrcPtr2>::value_type>::type> > > \
|
||||||
@ -70,6 +73,8 @@ CV_CUDEV_EXPR_BINARY_FUNC(absdiff)
|
|||||||
|
|
||||||
#undef CV_CUDEV_EXPR_BINARY_FUNC
|
#undef CV_CUDEV_EXPR_BINARY_FUNC
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -58,6 +58,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// Binary Operations
|
// Binary Operations
|
||||||
|
|
||||||
#define CV_CUDEV_EXPR_BINOP_INST(op, functor) \
|
#define CV_CUDEV_EXPR_BINOP_INST(op, functor) \
|
||||||
@ -230,6 +233,8 @@ CV_CUDEV_EXPR_BINOP_INST(>>, bit_rshift)
|
|||||||
|
|
||||||
#undef CV_CUDEV_EXPR_BINOP_INST
|
#undef CV_CUDEV_EXPR_BINOP_INST
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
#define CV_CUDEV_EXPR_CVTCOLOR_INST(name) \
|
#define CV_CUDEV_EXPR_CVTCOLOR_INST(name) \
|
||||||
template <class SrcPtr> \
|
template <class SrcPtr> \
|
||||||
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<SrcPtr>::ptr_type, name ## _func<typename VecTraits<typename PtrTraits<SrcPtr>::value_type>::elem_type> > > \
|
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<SrcPtr>::ptr_type, name ## _func<typename VecTraits<typename PtrTraits<SrcPtr>::value_type>::elem_type> > > \
|
||||||
@ -277,6 +280,8 @@ CV_CUDEV_EXPR_CVTCOLOR_INST(Luv4_to_LBGRA)
|
|||||||
|
|
||||||
#undef CV_CUDEV_EXPR_CVTCOLOR_INST
|
#undef CV_CUDEV_EXPR_CVTCOLOR_INST
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// derivX
|
// derivX
|
||||||
|
|
||||||
template <class SrcPtr>
|
template <class SrcPtr>
|
||||||
@ -116,6 +119,8 @@ laplacian_(const SrcPtr& src)
|
|||||||
return makeExpr(laplacianPtr<ksize>(src));
|
return makeExpr(laplacianPtr<ksize>(src));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Body> struct Expr
|
template <class Body> struct Expr
|
||||||
{
|
{
|
||||||
Body body;
|
Body body;
|
||||||
@ -87,6 +90,8 @@ template <class Body> struct PtrTraits< Expr<Body> >
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -56,6 +56,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// min/max
|
// min/max
|
||||||
|
|
||||||
template <class SrcPtr1, class SrcPtr2>
|
template <class SrcPtr1, class SrcPtr2>
|
||||||
@ -127,6 +130,8 @@ lut_(const SrcPtr& src, const TablePtr& tbl)
|
|||||||
return makeExpr(lutPtr(src, tbl));
|
return makeExpr(lutPtr(src, tbl));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -56,6 +56,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// sum
|
// sum
|
||||||
|
|
||||||
template <class SrcPtr> struct SumExprBody
|
template <class SrcPtr> struct SumExprBody
|
||||||
@ -254,6 +257,8 @@ integral_(const SrcPtr& src)
|
|||||||
return makeExpr(body);
|
return makeExpr(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
#define CV_CUDEV_EXPR_UNARY_FUNC(name) \
|
#define CV_CUDEV_EXPR_UNARY_FUNC(name) \
|
||||||
template <class SrcPtr> \
|
template <class SrcPtr> \
|
||||||
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<SrcPtr>::ptr_type, name ## _func<typename PtrTraits<SrcPtr>::value_type> > > \
|
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<SrcPtr>::ptr_type, name ## _func<typename PtrTraits<SrcPtr>::value_type> > > \
|
||||||
@ -93,6 +96,8 @@ pow_(const SrcPtr& src, float power)
|
|||||||
return makeExpr(transformPtr(src, bind2nd(pow_func<typename PtrTraits<SrcPtr>::value_type>(), power)));
|
return makeExpr(transformPtr(src, bind2nd(pow_func<typename PtrTraits<SrcPtr>::value_type>(), power)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
#define CV_CUDEV_EXPR_UNOP_INST(op, functor) \
|
#define CV_CUDEV_EXPR_UNOP_INST(op, functor) \
|
||||||
template <typename T> \
|
template <typename T> \
|
||||||
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<GpuMat_<T> >::ptr_type, functor<T> > > \
|
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<GpuMat_<T> >::ptr_type, functor<T> > > \
|
||||||
@ -89,6 +92,8 @@ CV_CUDEV_EXPR_UNOP_INST(~, bit_not)
|
|||||||
|
|
||||||
#undef CV_CUDEV_EXPR_UNOP_INST
|
#undef CV_CUDEV_EXPR_UNOP_INST
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// resize
|
// resize
|
||||||
|
|
||||||
template <class SrcPtr>
|
template <class SrcPtr>
|
||||||
@ -166,6 +169,8 @@ transpose_(const SrcPtr& src)
|
|||||||
return makeExpr(body);
|
return makeExpr(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// Various 3/4-channel to 3/4-channel RGB transformations
|
// Various 3/4-channel to 3/4-channel RGB transformations
|
||||||
|
|
||||||
#define CV_CUDEV_RGB2RGB_INST(name, scn, dcn, bidx) \
|
#define CV_CUDEV_RGB2RGB_INST(name, scn, dcn, bidx) \
|
||||||
@ -469,6 +472,8 @@ CV_CUDEV_RGB5x52GRAY_INST(BGR565_to_GRAY, 6)
|
|||||||
|
|
||||||
#undef CV_CUDEV_RGB5x52GRAY_INST
|
#undef CV_CUDEV_RGB5x52GRAY_INST
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// Function Objects
|
// Function Objects
|
||||||
|
|
||||||
template <typename _Arg, typename _Result> struct unary_function
|
template <typename _Arg, typename _Result> struct unary_function
|
||||||
@ -873,6 +876,8 @@ template <typename F> struct IsBinaryFunction
|
|||||||
enum { value = (sizeof(check(makeF())) == sizeof(Yes)) };
|
enum { value = (sizeof(check(makeF())) == sizeof(Yes)) };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Op, int n> struct UnaryTupleAdapter
|
template <class Op, int n> struct UnaryTupleAdapter
|
||||||
{
|
{
|
||||||
typedef typename Op::result_type result_type;
|
typedef typename Op::result_type result_type;
|
||||||
@ -93,6 +96,8 @@ __host__ __device__ BinaryTupleAdapter<Op, n0, n1> binaryTupleAdapter(const Op&
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
|
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
|
||||||
__host__ void gridCopy_(const SrcPtr& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
__host__ void gridCopy_(const SrcPtr& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -447,6 +450,8 @@ __host__ void gridCopy_(const SrcPtrTuple& src, const tuple< GlobPtrSz<D0>, Glob
|
|||||||
gridCopy_<DefaultCopyPolicy>(src, dst, stream);
|
gridCopy_<DefaultCopyPolicy>(src, dst, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <int BIN_COUNT, class Policy, class SrcPtr, typename ResType, class MaskPtr>
|
template <int BIN_COUNT, class Policy, class SrcPtr, typename ResType, class MaskPtr>
|
||||||
__host__ void gridHistogram_(const SrcPtr& src, GpuMat_<ResType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
__host__ void gridHistogram_(const SrcPtr& src, GpuMat_<ResType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -114,6 +117,8 @@ __host__ void gridHistogram(const SrcPtr& src, GpuMat_<ResType>& dst, Stream& st
|
|||||||
gridHistogram_<BIN_COUNT, DefaultHistogramPolicy>(src, dst, stream);
|
gridHistogram_<BIN_COUNT, DefaultHistogramPolicy>(src, dst, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class SrcPtr, typename DstType>
|
template <class SrcPtr, typename DstType>
|
||||||
__host__ void gridIntegral(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
|
__host__ void gridIntegral(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -64,6 +67,8 @@ __host__ void gridIntegral(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& str
|
|||||||
integral_detail::integral(shrinkPtr(src), shrinkPtr(dst), rows, cols, StreamAccessor::getStream(stream));
|
integral_detail::integral(shrinkPtr(src), shrinkPtr(dst), rows, cols, StreamAccessor::getStream(stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,6 +55,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Brd, class SrcPtr, typename DstType>
|
template <class Brd, class SrcPtr, typename DstType>
|
||||||
__host__ void gridPyrDown_(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
|
__host__ void gridPyrDown_(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -83,6 +86,8 @@ __host__ void gridPyrUp(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream
|
|||||||
pyramids_detail::pyrUp(shrinkPtr(src), shrinkPtr(dst), rows, cols, dst.rows, dst.cols, StreamAccessor::getStream(stream));
|
pyramids_detail::pyrUp(shrinkPtr(src), shrinkPtr(dst), rows, cols, dst.rows, dst.cols, StreamAccessor::getStream(stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Policy, class SrcPtr, typename ResType, class MaskPtr>
|
template <class Policy, class SrcPtr, typename ResType, class MaskPtr>
|
||||||
__host__ void gridCalcSum_(const SrcPtr& src, GpuMat_<ResType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
__host__ void gridCalcSum_(const SrcPtr& src, GpuMat_<ResType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -370,6 +373,8 @@ __host__ void gridCountNonZero(const SrcPtr& src, GpuMat_<ResType>& dst, Stream&
|
|||||||
gridCountNonZero_<DefaultGlobReducePolicy>(src, dst, stream);
|
gridCountNonZero_<DefaultGlobReducePolicy>(src, dst, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -59,6 +59,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <typename T> struct Sum : plus<T>
|
template <typename T> struct Sum : plus<T>
|
||||||
{
|
{
|
||||||
typedef T work_type;
|
typedef T work_type;
|
||||||
@ -225,6 +228,8 @@ __host__ void gridReduceToColumn(const SrcPtr& src, GpuMat_<ResType>& dst, Strea
|
|||||||
gridReduceToColumn_<Reductor, DefaultReduceToVecPolicy>(src, dst, stream);
|
gridReduceToColumn_<Reductor, DefaultReduceToVecPolicy>(src, dst, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Policy, class SrcPtrTuple, typename DstType, class MaskPtr>
|
template <class Policy, class SrcPtrTuple, typename DstType, class MaskPtr>
|
||||||
__host__ void gridMerge_(const SrcPtrTuple& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
__host__ void gridMerge_(const SrcPtrTuple& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -579,6 +582,8 @@ __host__ void gridSplit(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[COUNT], Str
|
|||||||
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);
|
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Policy, class SrcPtr, typename DstType, class UnOp, class MaskPtr>
|
template <class Policy, class SrcPtr, typename DstType, class UnOp, class MaskPtr>
|
||||||
__host__ void gridTransformUnary_(const SrcPtr& src, GpuMat_<DstType>& dst, const UnOp& op, const MaskPtr& mask, Stream& stream = Stream::Null())
|
__host__ void gridTransformUnary_(const SrcPtr& src, GpuMat_<DstType>& dst, const UnOp& op, const MaskPtr& mask, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -536,6 +539,8 @@ __host__ void gridTransformTuple(const SrcPtr& src, const tuple< GlobPtrSz<D0>,
|
|||||||
gridTransformTuple_<DefaultTransformPolicy>(src, dst, op, stream);
|
gridTransformTuple_<DefaultTransformPolicy>(src, dst, op, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Policy, class SrcPtr, typename DstType>
|
template <class Policy, class SrcPtr, typename DstType>
|
||||||
__host__ void gridTranspose_(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
|
__host__ void gridTranspose_(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
|
||||||
{
|
{
|
||||||
@ -98,6 +101,8 @@ __host__ void gridTranspose(const SrcPtr& src, const GlobPtrSz<DstType>& dst, St
|
|||||||
gridTranspose_<DefaultTransposePolicy>(src, dst, stream);
|
gridTranspose_<DefaultTransposePolicy>(src, dst, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <typename T> struct ConstantPtr
|
template <typename T> struct ConstantPtr
|
||||||
{
|
{
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
@ -88,6 +91,8 @@ template <typename T> struct PtrTraits< ConstantPtrSz<T> > : PtrTraitsBase< Cons
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// derivX
|
// derivX
|
||||||
|
|
||||||
template <class SrcPtr> struct DerivXPtr
|
template <class SrcPtr> struct DerivXPtr
|
||||||
@ -388,6 +391,8 @@ template <int ksize, class SrcPtr> struct PtrTraits< LaplacianPtrSz<ksize, SrcPt
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,6 +52,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// BrdConstant
|
// BrdConstant
|
||||||
|
|
||||||
template <class SrcPtr> struct BrdConstant
|
template <class SrcPtr> struct BrdConstant
|
||||||
@ -214,6 +217,8 @@ __host__ BrdBase<BrdWrap, typename PtrTraits<SrcPtr>::ptr_type> brdWrap(const Sr
|
|||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <typename T> struct GlobPtr
|
template <typename T> struct GlobPtr
|
||||||
{
|
{
|
||||||
typedef T value_type;
|
typedef T value_type;
|
||||||
@ -106,6 +109,8 @@ template <typename T> struct PtrTraits< GlobPtrSz<T> > : PtrTraitsBase<GlobPtrSz
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class GpuMat_ : public GpuMat
|
class GpuMat_ : public GpuMat
|
||||||
{
|
{
|
||||||
@ -154,6 +157,8 @@ template <typename T> struct PtrTraits< GpuMat_<T> > : PtrTraitsBase<GpuMat_<T>,
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#include "detail/gpumat.hpp"
|
#include "detail/gpumat.hpp"
|
||||||
|
@ -55,6 +55,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// Nearest
|
// Nearest
|
||||||
|
|
||||||
template <class SrcPtr> struct NearestInterPtr
|
template <class SrcPtr> struct NearestInterPtr
|
||||||
@ -380,6 +383,8 @@ template <class SrcPtr> struct PtrTraits< CommonAreaInterPtrSz<SrcPtr> > : PtrTr
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class SrcPtr, class TablePtr> struct LutPtr
|
template <class SrcPtr, class TablePtr> struct LutPtr
|
||||||
{
|
{
|
||||||
typedef typename PtrTraits<TablePtr>::value_type value_type;
|
typedef typename PtrTraits<TablePtr>::value_type value_type;
|
||||||
@ -95,6 +98,8 @@ template <class SrcPtr, class TablePtr> struct PtrTraits< LutPtrSz<SrcPtr, Table
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
struct WithOutMask
|
struct WithOutMask
|
||||||
{
|
{
|
||||||
typedef bool value_type;
|
typedef bool value_type;
|
||||||
@ -98,6 +101,8 @@ template <class MaskPtr> struct PtrTraits< SingleMaskChannelsSz<MaskPtr> > : Ptr
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class SrcPtr, class MapPtr> struct RemapPtr1
|
template <class SrcPtr, class MapPtr> struct RemapPtr1
|
||||||
{
|
{
|
||||||
typedef typename PtrTraits<SrcPtr>::value_type value_type;
|
typedef typename PtrTraits<SrcPtr>::value_type value_type;
|
||||||
@ -149,6 +152,8 @@ template <class SrcPtr, class MapXPtr, class MapYPtr> struct PtrTraits< RemapPtr
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class SrcPtr> struct ResizePtr
|
template <class SrcPtr> struct ResizePtr
|
||||||
{
|
{
|
||||||
typedef typename PtrTraits<SrcPtr>::value_type value_type;
|
typedef typename PtrTraits<SrcPtr>::value_type value_type;
|
||||||
@ -98,6 +101,8 @@ template <class SrcPtr> struct PtrTraits< ResizePtrSz<SrcPtr> > : PtrTraitsBase<
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -92,6 +92,9 @@ namespace
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
#if CUDART_VERSION >= 5050
|
#if CUDART_VERSION >= 5050
|
||||||
|
|
||||||
template <typename T> struct TexturePtr
|
template <typename T> struct TexturePtr
|
||||||
@ -248,6 +251,8 @@ template <typename T> struct PtrTraits< Texture<T> > : PtrTraitsBase<Texture<T>,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class Ptr2DSz, class Ptr2D> struct PtrTraitsBase
|
template <class Ptr2DSz, class Ptr2D> struct PtrTraitsBase
|
||||||
{
|
{
|
||||||
typedef Ptr2DSz ptr_sz_type;
|
typedef Ptr2DSz ptr_sz_type;
|
||||||
@ -96,6 +99,8 @@ __host__ int getCols(const Ptr2DSz& ptr)
|
|||||||
return PtrTraits<Ptr2DSz>::getCols(ptr);
|
return PtrTraits<Ptr2DSz>::getCols(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// UnaryTransformPtr
|
// UnaryTransformPtr
|
||||||
|
|
||||||
template <class SrcPtr, class Op> struct UnaryTransformPtr
|
template <class SrcPtr, class Op> struct UnaryTransformPtr
|
||||||
@ -146,6 +149,8 @@ template <class Src1Ptr, class Src2Ptr, class Op> struct PtrTraits< BinaryTransf
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// affine
|
// affine
|
||||||
|
|
||||||
struct AffineMapPtr
|
struct AffineMapPtr
|
||||||
@ -147,6 +150,8 @@ warpPerspectivePtr(const SrcPtr& src, Size dstSize, const GpuMat_<float>& warpMa
|
|||||||
return remapPtr(src, perspectiveMap(dstSize, warpMat));
|
return remapPtr(src, perspectiveMap(dstSize, warpMat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,6 +52,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class PtrTuple> struct ZipPtr;
|
template <class PtrTuple> struct ZipPtr;
|
||||||
|
|
||||||
template <class Ptr0, class Ptr1> struct ZipPtr< tuple<Ptr0, Ptr1> > : tuple<Ptr0, Ptr1>
|
template <class Ptr0, class Ptr1> struct ZipPtr< tuple<Ptr0, Ptr1> > : tuple<Ptr0, Ptr1>
|
||||||
@ -168,6 +171,8 @@ template <class PtrTuple> struct PtrTraits< ZipPtrSz<PtrTuple> > : PtrTraitsBase
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// atomicAdd
|
// atomicAdd
|
||||||
|
|
||||||
__device__ __forceinline__ int atomicAdd(int* address, int val)
|
__device__ __forceinline__ int atomicAdd(int* address, int val)
|
||||||
@ -192,6 +195,8 @@ __device__ static double atomicMax(double* address, double val)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,6 +52,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <class T> struct numeric_limits;
|
template <class T> struct numeric_limits;
|
||||||
|
|
||||||
template <> struct numeric_limits<bool>
|
template <> struct numeric_limits<bool>
|
||||||
@ -119,6 +122,8 @@ template <> struct numeric_limits<double>
|
|||||||
static const bool is_signed = true;
|
static const bool is_signed = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <typename T> __device__ __forceinline__ T saturate_cast(uchar v) { return T(v); }
|
template <typename T> __device__ __forceinline__ T saturate_cast(uchar v) { return T(v); }
|
||||||
template <typename T> __device__ __forceinline__ T saturate_cast(schar v) { return T(v); }
|
template <typename T> __device__ __forceinline__ T saturate_cast(schar v) { return T(v); }
|
||||||
template <typename T> __device__ __forceinline__ T saturate_cast(ushort v) { return T(v); }
|
template <typename T> __device__ __forceinline__ T saturate_cast(ushort v) { return T(v); }
|
||||||
@ -267,6 +270,8 @@ template <> __device__ __forceinline__ uint saturate_cast<uint>(double v)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -128,6 +128,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// 2
|
// 2
|
||||||
|
|
||||||
__device__ __forceinline__ uint vadd2(uint a, uint b)
|
__device__ __forceinline__ uint vadd2(uint a, uint b)
|
||||||
@ -908,6 +911,8 @@ __device__ __forceinline__ uint vmin4(uint a, uint b)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
using tuple_detail::tuple;
|
using tuple_detail::tuple;
|
||||||
using tuple_detail::tuple_size;
|
using tuple_detail::tuple_size;
|
||||||
using tuple_detail::get;
|
using tuple_detail::get;
|
||||||
@ -75,6 +78,8 @@ template <class Tuple, template <typename T> class CvtOp> struct ConvertTuple
|
|||||||
typedef typename tuple_detail::ConvertTuple<Tuple, tuple_size<Tuple>::value, CvtOp>::type type;
|
typedef typename tuple_detail::ConvertTuple<Tuple, tuple_size<Tuple>::value, CvtOp>::type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,6 +52,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// NullType
|
// NullType
|
||||||
|
|
||||||
struct NullType {};
|
struct NullType {};
|
||||||
@ -164,6 +167,8 @@ template <typename A, typename B> struct LargerType
|
|||||||
>::type type;
|
>::type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// saturate_cast
|
// saturate_cast
|
||||||
|
|
||||||
namespace vec_math_detail
|
namespace vec_math_detail
|
||||||
@ -931,6 +934,8 @@ CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC(atan2, ::atan2, double, double, double)
|
|||||||
|
|
||||||
#undef CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
|
#undef CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// MakeVec
|
// MakeVec
|
||||||
|
|
||||||
template<typename T, int CN> struct MakeVec;
|
template<typename T, int CN> struct MakeVec;
|
||||||
@ -177,6 +180,8 @@ template<> struct VecTraits<char4>
|
|||||||
__host__ __device__ __forceinline__ static char4 make(const schar* v) {return make_char4(v[0], v[1], v[2], v[3]);}
|
__host__ __device__ __forceinline__ static char4 make(const schar* v) {return make_char4(v[0], v[1], v[2], v[3]);}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
// DataType
|
// DataType
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
// warpReduce
|
// warpReduce
|
||||||
|
|
||||||
template <typename T, class Op>
|
template <typename T, class Op>
|
||||||
@ -201,6 +204,8 @@ smem_tuple(T0* t0, T1* t1, T2* t2, T3* t3, T4* t4, T5* t5, T6* t6, T7* t7, T8* t
|
|||||||
return make_tuple((volatile T0*) t0, (volatile T1*) t1, (volatile T2*) t2, (volatile T3*) t3, (volatile T4*) t4, (volatile T5*) t5, (volatile T6*) t6, (volatile T7*) t7, (volatile T8*) t8, (volatile T9*) t9);
|
return make_tuple((volatile T0*) t0, (volatile T1*) t1, (volatile T2*) t2, (volatile T3*) t3, (volatile T4*) t4, (volatile T5*) t5, (volatile T6*) t6, (volatile T7*) t7, (volatile T8*) t8, (volatile T9*) t9);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,6 +52,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
__device__ T warpScanInclusive(T data, volatile T* smem, uint tid)
|
__device__ T warpScanInclusive(T data, volatile T* smem, uint tid)
|
||||||
{
|
{
|
||||||
@ -94,6 +97,8 @@ __device__ __forceinline__ T warpScanExclusive(T data, volatile T* smem, uint ti
|
|||||||
return warpScanInclusive(data, smem, tid) - data;
|
return warpScanInclusive(data, smem, tid) - data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
#if CV_CUDEV_ARCH >= 300
|
#if CV_CUDEV_ARCH >= 300
|
||||||
|
|
||||||
// shfl
|
// shfl
|
||||||
@ -419,6 +422,8 @@ CV_CUDEV_SHFL_XOR_VEC_INST(double)
|
|||||||
|
|
||||||
#endif // CV_CUDEV_ARCH >= 300
|
#endif // CV_CUDEV_ARCH >= 300
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
namespace cv { namespace cudev {
|
namespace cv { namespace cudev {
|
||||||
|
|
||||||
|
//! @addtogroup cudev
|
||||||
|
//! @{
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
LOG_WARP_SIZE = 5,
|
LOG_WARP_SIZE = 5,
|
||||||
@ -117,6 +120,8 @@ __device__ __forceinline__ void warpYota(OutIt beg, OutIt end, T value)
|
|||||||
*t = value;
|
*t = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,18 +46,54 @@
|
|||||||
#include "opencv2/core.hpp"
|
#include "opencv2/core.hpp"
|
||||||
#include "opencv2/flann/miniflann.hpp"
|
#include "opencv2/flann/miniflann.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@defgroup features2d 2D Features Framework
|
||||||
|
@{
|
||||||
|
@defgroup features2d_main Feature Detection and Description
|
||||||
|
@defgroup features2d_match Descriptor Matchers
|
||||||
|
|
||||||
|
Matchers of keypoint descriptors in OpenCV have wrappers with a common interface that enables you to
|
||||||
|
easily switch between different algorithms solving the same problem. This section is devoted to
|
||||||
|
matching descriptors that are represented as vectors in a multidimensional space. All objects that
|
||||||
|
implement vector descriptor matchers inherit the DescriptorMatcher interface.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- An example explaining keypoint matching can be found at
|
||||||
|
opencv_source_code/samples/cpp/descriptor_extractor_matcher.cpp
|
||||||
|
- An example on descriptor matching evaluation can be found at
|
||||||
|
opencv_source_code/samples/cpp/detector_descriptor_matcher_evaluation.cpp
|
||||||
|
- An example on one to many image matching can be found at
|
||||||
|
opencv_source_code/samples/cpp/matching_to_many_images.cpp
|
||||||
|
|
||||||
|
@defgroup features2d_draw Drawing Function of Keypoints and Matches
|
||||||
|
@defgroup features2d_category Object Categorization
|
||||||
|
|
||||||
|
This section describes approaches based on local 2D features and used to categorize objects.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- A complete Bag-Of-Words sample can be found at
|
||||||
|
opencv_source_code/samples/cpp/bagofwords_classification.cpp
|
||||||
|
- (Python) An example using the features2D framework to perform object categorization can be
|
||||||
|
found at opencv_source_code/samples/python2/find_obj.py
|
||||||
|
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//! @addtogroup features2d
|
||||||
|
//! @{
|
||||||
|
|
||||||
// //! writes vector of keypoints to the file storage
|
// //! writes vector of keypoints to the file storage
|
||||||
// CV_EXPORTS void write(FileStorage& fs, const String& name, const std::vector<KeyPoint>& keypoints);
|
// CV_EXPORTS void write(FileStorage& fs, const String& name, const std::vector<KeyPoint>& keypoints);
|
||||||
// //! reads vector of keypoints from the specified file storage node
|
// //! reads vector of keypoints from the specified file storage node
|
||||||
// CV_EXPORTS void read(const FileNode& node, CV_OUT std::vector<KeyPoint>& keypoints);
|
// CV_EXPORTS void read(const FileNode& node, CV_OUT std::vector<KeyPoint>& keypoints);
|
||||||
|
|
||||||
/*
|
/** @brief A class filters a vector of keypoints.
|
||||||
* A class filters a vector of keypoints.
|
|
||||||
* Because now it is difficult to provide a convenient interface for all usage scenarios of the keypoints filter class,
|
Because now it is difficult to provide a convenient interface for all usage scenarios of the
|
||||||
* it has only several needed by now static methods.
|
keypoints filter class, it has only several needed by now static methods.
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS KeyPointsFilter
|
class CV_EXPORTS KeyPointsFilter
|
||||||
{
|
{
|
||||||
@ -91,44 +127,66 @@ public:
|
|||||||
|
|
||||||
/************************************ Base Classes ************************************/
|
/************************************ Base Classes ************************************/
|
||||||
|
|
||||||
/*
|
/** @brief Abstract base class for 2D image feature detectors and descriptor extractors
|
||||||
* Abstract base class for 2D image feature detectors and descriptor extractors
|
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W Feature2D : public virtual Algorithm
|
class CV_EXPORTS_W Feature2D : public virtual Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~Feature2D();
|
virtual ~Feature2D();
|
||||||
|
|
||||||
/*
|
/** @brief Detects keypoints in an image (first variant) or image set (second variant).
|
||||||
* Detect keypoints in an image.
|
|
||||||
* image The image.
|
@param image Image.
|
||||||
* keypoints The detected keypoints.
|
@param keypoints The detected keypoints. In the second variant of the method keypoints[i] is a set
|
||||||
* mask Mask specifying where to look for keypoints (optional). Must be a char
|
of keypoints detected in images[i] .
|
||||||
* matrix with non-zero values in the region of interest.
|
@param mask Mask specifying where to look for keypoints (optional). It must be a 8-bit integer
|
||||||
|
matrix with non-zero values in the region of interest.
|
||||||
*/
|
*/
|
||||||
CV_WRAP virtual void detect( InputArray image,
|
CV_WRAP virtual void detect( InputArray image,
|
||||||
CV_OUT std::vector<KeyPoint>& keypoints,
|
CV_OUT std::vector<KeyPoint>& keypoints,
|
||||||
InputArray mask=noArray() );
|
InputArray mask=noArray() );
|
||||||
|
|
||||||
|
/** @overload
|
||||||
|
@param images Image set.
|
||||||
|
@param keypoints The detected keypoints. In the second variant of the method keypoints[i] is a set
|
||||||
|
of keypoints detected in images[i] .
|
||||||
|
@param masks Masks for each input image specifying where to look for keypoints (optional).
|
||||||
|
masks[i] is a mask for images[i].
|
||||||
|
*/
|
||||||
virtual void detect( InputArrayOfArrays images,
|
virtual void detect( InputArrayOfArrays images,
|
||||||
std::vector<std::vector<KeyPoint> >& keypoints,
|
std::vector<std::vector<KeyPoint> >& keypoints,
|
||||||
InputArrayOfArrays masks=noArray() );
|
InputArrayOfArrays masks=noArray() );
|
||||||
|
|
||||||
/*
|
/** @brief Computes the descriptors for a set of keypoints detected in an image (first variant) or image set
|
||||||
* Compute the descriptors for a set of keypoints in an image.
|
(second variant).
|
||||||
* image The image.
|
|
||||||
* keypoints The input keypoints. Keypoints for which a descriptor cannot be computed are removed.
|
@param image Image.
|
||||||
* descriptors Copmputed descriptors. Row i is the descriptor for keypoint i.
|
@param keypoints Input collection of keypoints. Keypoints for which a descriptor cannot be
|
||||||
|
computed are removed. Sometimes new keypoints can be added, for example: SIFT duplicates keypoint
|
||||||
|
with several dominant orientations (for each orientation).
|
||||||
|
@param descriptors Computed descriptors. In the second variant of the method descriptors[i] are
|
||||||
|
descriptors computed for a keypoints[i]. Row j is the keypoints (or keypoints[i]) is the
|
||||||
|
descriptor for keypoint j-th keypoint.
|
||||||
*/
|
*/
|
||||||
CV_WRAP virtual void compute( InputArray image,
|
CV_WRAP virtual void compute( InputArray image,
|
||||||
CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints,
|
CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints,
|
||||||
OutputArray descriptors );
|
OutputArray descriptors );
|
||||||
|
|
||||||
|
/** @overload
|
||||||
|
|
||||||
|
@param images Image set.
|
||||||
|
@param keypoints Input collection of keypoints. Keypoints for which a descriptor cannot be
|
||||||
|
computed are removed. Sometimes new keypoints can be added, for example: SIFT duplicates keypoint
|
||||||
|
with several dominant orientations (for each orientation).
|
||||||
|
@param descriptors Computed descriptors. In the second variant of the method descriptors[i] are
|
||||||
|
descriptors computed for a keypoints[i]. Row j is the keypoints (or keypoints[i]) is the
|
||||||
|
descriptor for keypoint j-th keypoint.
|
||||||
|
*/
|
||||||
virtual void compute( InputArrayOfArrays images,
|
virtual void compute( InputArrayOfArrays images,
|
||||||
std::vector<std::vector<KeyPoint> >& keypoints,
|
std::vector<std::vector<KeyPoint> >& keypoints,
|
||||||
OutputArrayOfArrays descriptors );
|
OutputArrayOfArrays descriptors );
|
||||||
|
|
||||||
/* Detects keypoints and computes the descriptors */
|
/** Detects keypoints and computes the descriptors */
|
||||||
CV_WRAP virtual void detectAndCompute( InputArray image, InputArray mask,
|
CV_WRAP virtual void detectAndCompute( InputArray image, InputArray mask,
|
||||||
CV_OUT std::vector<KeyPoint>& keypoints,
|
CV_OUT std::vector<KeyPoint>& keypoints,
|
||||||
OutputArray descriptors,
|
OutputArray descriptors,
|
||||||
@ -138,33 +196,96 @@ public:
|
|||||||
CV_WRAP virtual int descriptorType() const;
|
CV_WRAP virtual int descriptorType() const;
|
||||||
CV_WRAP virtual int defaultNorm() const;
|
CV_WRAP virtual int defaultNorm() const;
|
||||||
|
|
||||||
// Return true if detector object is empty
|
//! Return true if detector object is empty
|
||||||
CV_WRAP virtual bool empty() const;
|
CV_WRAP virtual bool empty() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Feature detectors in OpenCV have wrappers with a common interface that enables you to easily switch
|
||||||
|
between different algorithms solving the same problem. All objects that implement keypoint detectors
|
||||||
|
inherit the FeatureDetector interface. */
|
||||||
typedef Feature2D FeatureDetector;
|
typedef Feature2D FeatureDetector;
|
||||||
|
|
||||||
|
/** Extractors of keypoint descriptors in OpenCV have wrappers with a common interface that enables you
|
||||||
|
to easily switch between different algorithms solving the same problem. This section is devoted to
|
||||||
|
computing descriptors represented as vectors in a multidimensional space. All objects that implement
|
||||||
|
the vector descriptor extractors inherit the DescriptorExtractor interface.
|
||||||
|
*/
|
||||||
typedef Feature2D DescriptorExtractor;
|
typedef Feature2D DescriptorExtractor;
|
||||||
|
|
||||||
/*!
|
//! @addtogroup features2d_main
|
||||||
BRISK implementation
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Class implementing the BRISK keypoint detector and descriptor extractor, described in @cite LCS11 .
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W BRISK : public Feature2D
|
class CV_EXPORTS_W BRISK : public Feature2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief The BRISK constructor
|
||||||
|
|
||||||
|
@param thresh FAST/AGAST detection threshold score.
|
||||||
|
@param octaves detection octaves. Use 0 to do single scale.
|
||||||
|
@param patternScale apply this scale to the pattern used for sampling the neighbourhood of a
|
||||||
|
keypoint.
|
||||||
|
*/
|
||||||
CV_WRAP static Ptr<BRISK> create(int thresh=30, int octaves=3, float patternScale=1.0f);
|
CV_WRAP static Ptr<BRISK> create(int thresh=30, int octaves=3, float patternScale=1.0f);
|
||||||
// custom setup
|
|
||||||
|
/** @brief The BRISK constructor for a custom pattern
|
||||||
|
|
||||||
|
@param radiusList defines the radii (in pixels) where the samples around a keypoint are taken (for
|
||||||
|
keypoint scale 1).
|
||||||
|
@param numberList defines the number of sampling points on the sampling circle. Must be the same
|
||||||
|
size as radiusList..
|
||||||
|
@param dMax threshold for the short pairings used for descriptor formation (in pixels for keypoint
|
||||||
|
scale 1).
|
||||||
|
@param dMin threshold for the long pairings used for orientation determination (in pixels for
|
||||||
|
keypoint scale 1).
|
||||||
|
@param indexChange index remapping of the bits. */
|
||||||
CV_WRAP static Ptr<BRISK> create(const std::vector<float> &radiusList, const std::vector<int> &numberList,
|
CV_WRAP static Ptr<BRISK> create(const std::vector<float> &radiusList, const std::vector<int> &numberList,
|
||||||
float dMax=5.85f, float dMin=8.2f, const std::vector<int>& indexChange=std::vector<int>());
|
float dMax=5.85f, float dMin=8.2f, const std::vector<int>& indexChange=std::vector<int>());
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/** @brief Class implementing the ORB (*oriented BRIEF*) keypoint detector and descriptor extractor
|
||||||
ORB implementation.
|
|
||||||
|
described in @cite RRKB11 . The algorithm uses FAST in pyramids to detect stable keypoints, selects
|
||||||
|
the strongest features using FAST or Harris response, finds their orientation using first-order
|
||||||
|
moments and computes the descriptors using BRIEF (where the coordinates of random point pairs (or
|
||||||
|
k-tuples) are rotated according to the measured orientation).
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W ORB : public Feature2D
|
class CV_EXPORTS_W ORB : public Feature2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 };
|
enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 };
|
||||||
|
|
||||||
|
/** @brief The ORB constructor
|
||||||
|
|
||||||
|
@param nfeatures The maximum number of features to retain.
|
||||||
|
@param scaleFactor Pyramid decimation ratio, greater than 1. scaleFactor==2 means the classical
|
||||||
|
pyramid, where each next level has 4x less pixels than the previous, but such a big scale factor
|
||||||
|
will degrade feature matching scores dramatically. On the other hand, too close to 1 scale factor
|
||||||
|
will mean that to cover certain scale range you will need more pyramid levels and so the speed
|
||||||
|
will suffer.
|
||||||
|
@param nlevels The number of pyramid levels. The smallest level will have linear size equal to
|
||||||
|
input_image_linear_size/pow(scaleFactor, nlevels).
|
||||||
|
@param edgeThreshold This is size of the border where the features are not detected. It should
|
||||||
|
roughly match the patchSize parameter.
|
||||||
|
@param firstLevel It should be 0 in the current implementation.
|
||||||
|
@param WTA_K The number of points that produce each element of the oriented BRIEF descriptor. The
|
||||||
|
default value 2 means the BRIEF where we take a random point pair and compare their brightnesses,
|
||||||
|
so we get 0/1 response. Other possible values are 3 and 4. For example, 3 means that we take 3
|
||||||
|
random points (of course, those point coordinates are random, but they are generated from the
|
||||||
|
pre-defined seed, so each element of BRIEF descriptor is computed deterministically from the pixel
|
||||||
|
rectangle), find point of maximum brightness and output index of the winner (0, 1 or 2). Such
|
||||||
|
output will occupy 2 bits, and therefore it will need a special variant of Hamming distance,
|
||||||
|
denoted as NORM_HAMMING2 (2 bits per bin). When WTA_K=4, we take 4 random points to compute each
|
||||||
|
bin (that will also occupy 2 bits with possible values 0, 1, 2 or 3).
|
||||||
|
@param scoreType The default HARRIS_SCORE means that Harris algorithm is used to rank features
|
||||||
|
(the score is written to KeyPoint::score and is used to retain best nfeatures features);
|
||||||
|
FAST_SCORE is alternative value of the parameter that produces slightly less stable keypoints,
|
||||||
|
but it is a little faster to compute.
|
||||||
|
@param patchSize size of the patch used by the oriented BRIEF descriptor. Of course, on smaller
|
||||||
|
pyramid layers the perceived image area covered by a feature will be larger.
|
||||||
|
@param fastThreshold
|
||||||
|
*/
|
||||||
CV_WRAP static Ptr<ORB> create(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31,
|
CV_WRAP static Ptr<ORB> create(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31,
|
||||||
int firstLevel=0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold=20);
|
int firstLevel=0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold=20);
|
||||||
|
|
||||||
@ -196,14 +317,15 @@ public:
|
|||||||
CV_WRAP virtual int getFastThreshold() const = 0;
|
CV_WRAP virtual int getFastThreshold() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/** @brief Maximally stable extremal region extractor. :
|
||||||
Maximal Stable Extremal Regions class.
|
|
||||||
|
|
||||||
The class implements MSER algorithm introduced by J. Matas.
|
The class encapsulates all the parameters of the MSER extraction algorithm (see
|
||||||
Unlike SIFT, SURF and many other detectors in OpenCV, this is salient region detector,
|
<http://en.wikipedia.org/wiki/Maximally_stable_extremal_regions>). Also see
|
||||||
not the salient point detector.
|
<http://code.opencv.org/projects/opencv/wiki/MSER> for useful comments and parameters description.
|
||||||
|
|
||||||
It returns the regions, each of those is encoded as a contour.
|
@note
|
||||||
|
- (Python) A complete example showing the use of the MSER detector can be found at
|
||||||
|
opencv_source_code/samples/python2/mser.py
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W MSER : public Feature2D
|
class CV_EXPORTS_W MSER : public Feature2D
|
||||||
{
|
{
|
||||||
@ -231,13 +353,38 @@ public:
|
|||||||
CV_WRAP virtual bool getPass2Only() const = 0;
|
CV_WRAP virtual bool getPass2Only() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! detects corners using FAST algorithm by E. Rosten
|
/** @overload */
|
||||||
CV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,
|
CV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,
|
||||||
int threshold, bool nonmaxSuppression=true );
|
int threshold, bool nonmaxSuppression=true );
|
||||||
|
|
||||||
|
/** @brief Detects corners using the FAST algorithm
|
||||||
|
|
||||||
|
@param image grayscale image where keypoints (corners) are detected.
|
||||||
|
@param keypoints keypoints detected on the image.
|
||||||
|
@param threshold threshold on difference between intensity of the central pixel and pixels of a
|
||||||
|
circle around this pixel.
|
||||||
|
@param nonmaxSuppression if true, non-maximum suppression is applied to detected corners
|
||||||
|
(keypoints).
|
||||||
|
@param type one of the three neighborhoods as defined in the paper:
|
||||||
|
FastFeatureDetector::TYPE_9_16, FastFeatureDetector::TYPE_7_12,
|
||||||
|
FastFeatureDetector::TYPE_5_8
|
||||||
|
|
||||||
|
Detects corners using the FAST algorithm by @cite Rosten06 .
|
||||||
|
|
||||||
|
@note In Python API, types are given as cv2.FAST_FEATURE_DETECTOR_TYPE_5_8,
|
||||||
|
cv2.FAST_FEATURE_DETECTOR_TYPE_7_12 and cv2.FAST_FEATURE_DETECTOR_TYPE_9_16. For corner
|
||||||
|
detection, use cv2.FAST.detect() method.
|
||||||
|
*/
|
||||||
CV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,
|
CV_EXPORTS void FAST( InputArray image, CV_OUT std::vector<KeyPoint>& keypoints,
|
||||||
int threshold, bool nonmaxSuppression, int type );
|
int threshold, bool nonmaxSuppression, int type );
|
||||||
|
|
||||||
|
//! @} features2d_main
|
||||||
|
|
||||||
|
//! @addtogroup features2d_main
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Wrapping class for feature detection using the FAST method. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS_W FastFeatureDetector : public Feature2D
|
class CV_EXPORTS_W FastFeatureDetector : public Feature2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -261,7 +408,8 @@ public:
|
|||||||
CV_WRAP virtual int getType() const = 0;
|
CV_WRAP virtual int getType() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Wrapping class for feature detection using the goodFeaturesToTrack function. :
|
||||||
|
*/
|
||||||
class CV_EXPORTS_W GFTTDetector : public Feature2D
|
class CV_EXPORTS_W GFTTDetector : public Feature2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -286,7 +434,37 @@ public:
|
|||||||
CV_WRAP virtual double getK() const = 0;
|
CV_WRAP virtual double getK() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Class for extracting blobs from an image. :
|
||||||
|
|
||||||
|
The class implements a simple algorithm for extracting blobs from an image:
|
||||||
|
|
||||||
|
1. Convert the source image to binary images by applying thresholding with several thresholds from
|
||||||
|
minThreshold (inclusive) to maxThreshold (exclusive) with distance thresholdStep between
|
||||||
|
neighboring thresholds.
|
||||||
|
2. Extract connected components from every binary image by findContours and calculate their
|
||||||
|
centers.
|
||||||
|
3. Group centers from several binary images by their coordinates. Close centers form one group that
|
||||||
|
corresponds to one blob, which is controlled by the minDistBetweenBlobs parameter.
|
||||||
|
4. From the groups, estimate final centers of blobs and their radiuses and return as locations and
|
||||||
|
sizes of keypoints.
|
||||||
|
|
||||||
|
This class performs several filtrations of returned blobs. You should set filterBy\* to true/false
|
||||||
|
to turn on/off corresponding filtration. Available filtrations:
|
||||||
|
|
||||||
|
- **By color**. This filter compares the intensity of a binary image at the center of a blob to
|
||||||
|
blobColor. If they differ, the blob is filtered out. Use blobColor = 0 to extract dark blobs
|
||||||
|
and blobColor = 255 to extract light blobs.
|
||||||
|
- **By area**. Extracted blobs have an area between minArea (inclusive) and maxArea (exclusive).
|
||||||
|
- **By circularity**. Extracted blobs have circularity
|
||||||
|
(\f$\frac{4*\pi*Area}{perimeter * perimeter}\f$) between minCircularity (inclusive) and
|
||||||
|
maxCircularity (exclusive).
|
||||||
|
- **By ratio of the minimum inertia to maximum inertia**. Extracted blobs have this ratio
|
||||||
|
between minInertiaRatio (inclusive) and maxInertiaRatio (exclusive).
|
||||||
|
- **By convexity**. Extracted blobs have convexity (area / area of blob convex hull) between
|
||||||
|
minConvexity (inclusive) and maxConvexity (exclusive).
|
||||||
|
|
||||||
|
Default values of parameters are tuned to extract dark circular blobs.
|
||||||
|
*/
|
||||||
class CV_EXPORTS_W SimpleBlobDetector : public Feature2D
|
class CV_EXPORTS_W SimpleBlobDetector : public Feature2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -322,9 +500,16 @@ public:
|
|||||||
create(const SimpleBlobDetector::Params ¶meters = SimpleBlobDetector::Params());
|
create(const SimpleBlobDetector::Params ¶meters = SimpleBlobDetector::Params());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} features2d_main
|
||||||
|
|
||||||
/*!
|
//! @addtogroup features2d_main
|
||||||
KAZE implementation
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Class implementing the KAZE keypoint detector and descriptor extractor, described in @cite ABD12 .
|
||||||
|
|
||||||
|
@note AKAZE descriptor can only be used with KAZE or AKAZE keypoints .. [ABD12] KAZE Features. Pablo
|
||||||
|
F. Alcantarilla, Adrien Bartoli and Andrew J. Davison. In European Conference on Computer Vision
|
||||||
|
(ECCV), Fiorenze, Italy, October 2012.
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W KAZE : public Feature2D
|
class CV_EXPORTS_W KAZE : public Feature2D
|
||||||
{
|
{
|
||||||
@ -337,6 +522,16 @@ public:
|
|||||||
DIFF_CHARBONNIER = 3
|
DIFF_CHARBONNIER = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief The KAZE constructor
|
||||||
|
|
||||||
|
@param extended Set to enable extraction of extended (128-byte) descriptor.
|
||||||
|
@param upright Set to enable use of upright descriptors (non rotation-invariant).
|
||||||
|
@param threshold Detector response threshold to accept point
|
||||||
|
@param nOctaves Maximum octave evolution of the image
|
||||||
|
@param nOctaveLayers Default number of sublevels per scale level
|
||||||
|
@param diffusivity Diffusivity type. DIFF_PM_G1, DIFF_PM_G2, DIFF_WEICKERT or
|
||||||
|
DIFF_CHARBONNIER
|
||||||
|
*/
|
||||||
CV_WRAP static Ptr<KAZE> create(bool extended=false, bool upright=false,
|
CV_WRAP static Ptr<KAZE> create(bool extended=false, bool upright=false,
|
||||||
float threshold = 0.001f,
|
float threshold = 0.001f,
|
||||||
int nOctaves = 4, int nOctaveLayers = 4,
|
int nOctaves = 4, int nOctaveLayers = 4,
|
||||||
@ -361,8 +556,12 @@ public:
|
|||||||
CV_WRAP virtual int getDiffusivity() const = 0;
|
CV_WRAP virtual int getDiffusivity() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/** @brief Class implementing the AKAZE keypoint detector and descriptor extractor, described in @cite ANB13 . :
|
||||||
AKAZE implementation
|
|
||||||
|
@note AKAZE descriptors can only be used with KAZE or AKAZE keypoints. Try to avoid using *extract*
|
||||||
|
and *detect* instead of *operator()* due to performance reasons. .. [ANB13] Fast Explicit Diffusion
|
||||||
|
for Accelerated Features in Nonlinear Scale Spaces. Pablo F. Alcantarilla, Jesús Nuevo and Adrien
|
||||||
|
Bartoli. In British Machine Vision Conference (BMVC), Bristol, UK, September 2013.
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W AKAZE : public Feature2D
|
class CV_EXPORTS_W AKAZE : public Feature2D
|
||||||
{
|
{
|
||||||
@ -376,6 +575,18 @@ public:
|
|||||||
DESCRIPTOR_MLDB = 5
|
DESCRIPTOR_MLDB = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief The AKAZE constructor
|
||||||
|
|
||||||
|
@param descriptor_type Type of the extracted descriptor: DESCRIPTOR_KAZE,
|
||||||
|
DESCRIPTOR_KAZE_UPRIGHT, DESCRIPTOR_MLDB or DESCRIPTOR_MLDB_UPRIGHT.
|
||||||
|
@param descriptor_size Size of the descriptor in bits. 0 -\> Full size
|
||||||
|
@param descriptor_channels Number of channels in the descriptor (1, 2, 3)
|
||||||
|
@param threshold Detector response threshold to accept point
|
||||||
|
@param nOctaves Maximum octave evolution of the image
|
||||||
|
@param nOctaveLayers Default number of sublevels per scale level
|
||||||
|
@param diffusivity Diffusivity type. DIFF_PM_G1, DIFF_PM_G2, DIFF_WEICKERT or
|
||||||
|
DIFF_CHARBONNIER
|
||||||
|
*/
|
||||||
CV_WRAP static Ptr<AKAZE> create(int descriptor_type=AKAZE::DESCRIPTOR_MLDB,
|
CV_WRAP static Ptr<AKAZE> create(int descriptor_type=AKAZE::DESCRIPTOR_MLDB,
|
||||||
int descriptor_size = 0, int descriptor_channels = 3,
|
int descriptor_size = 0, int descriptor_channels = 3,
|
||||||
float threshold = 0.001f, int nOctaves = 4,
|
float threshold = 0.001f, int nOctaves = 4,
|
||||||
@ -403,6 +614,8 @@ public:
|
|||||||
CV_WRAP virtual int getDiffusivity() const = 0;
|
CV_WRAP virtual int getDiffusivity() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} features2d_main
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* Distance *
|
* Distance *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
@ -501,76 +714,153 @@ template<int cellsize> struct HammingMultilevel
|
|||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* DescriptorMatcher *
|
* DescriptorMatcher *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
/*
|
|
||||||
* Abstract base class for matching two sets of descriptors.
|
//! @addtogroup features2d_match
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Abstract base class for matching keypoint descriptors.
|
||||||
|
|
||||||
|
It has two groups of match methods: for matching descriptors of an image with another image or with
|
||||||
|
an image set.
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W DescriptorMatcher : public Algorithm
|
class CV_EXPORTS_W DescriptorMatcher : public Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~DescriptorMatcher();
|
virtual ~DescriptorMatcher();
|
||||||
|
|
||||||
/*
|
/** @brief Adds descriptors to train a CPU(trainDescCollectionis) or GPU(utrainDescCollectionis) descriptor
|
||||||
* Add descriptors to train descriptor collection.
|
collection.
|
||||||
* descriptors Descriptors to add. Each descriptors[i] is a descriptors set from one image.
|
|
||||||
|
If the collection is not empty, the new descriptors are added to existing train descriptors.
|
||||||
|
|
||||||
|
@param descriptors Descriptors to add. Each descriptors[i] is a set of descriptors from the same
|
||||||
|
train image.
|
||||||
*/
|
*/
|
||||||
CV_WRAP virtual void add( InputArrayOfArrays descriptors );
|
CV_WRAP virtual void add( InputArrayOfArrays descriptors );
|
||||||
/*
|
|
||||||
* Get train descriptors collection.
|
/** @brief Returns a constant link to the train descriptor collection trainDescCollection .
|
||||||
*/
|
*/
|
||||||
CV_WRAP const std::vector<Mat>& getTrainDescriptors() const;
|
CV_WRAP const std::vector<Mat>& getTrainDescriptors() const;
|
||||||
/*
|
|
||||||
* Clear train descriptors collection.
|
/** @brief Clears the train descriptor collections.
|
||||||
*/
|
*/
|
||||||
CV_WRAP virtual void clear();
|
CV_WRAP virtual void clear();
|
||||||
|
|
||||||
/*
|
/** @brief Returns true if there are no train descriptors in the both collections.
|
||||||
* Return true if there are not train descriptors in collection.
|
|
||||||
*/
|
*/
|
||||||
CV_WRAP virtual bool empty() const;
|
CV_WRAP virtual bool empty() const;
|
||||||
/*
|
|
||||||
* Return true if the matcher supports mask in match methods.
|
/** @brief Returns true if the descriptor matcher supports masking permissible matches.
|
||||||
*/
|
*/
|
||||||
CV_WRAP virtual bool isMaskSupported() const = 0;
|
CV_WRAP virtual bool isMaskSupported() const = 0;
|
||||||
|
|
||||||
/*
|
/** @brief Trains a descriptor matcher
|
||||||
* Train matcher (e.g. train flann index).
|
|
||||||
* In all methods to match the method train() is run every time before matching.
|
Trains a descriptor matcher (for example, the flann index). In all methods to match, the method
|
||||||
* Some descriptor matchers (e.g. BruteForceMatcher) have empty implementation
|
train() is run every time before matching. Some descriptor matchers (for example, BruteForceMatcher)
|
||||||
* of this method, other matchers really train their inner structures
|
have an empty implementation of this method. Other matchers really train their inner structures (for
|
||||||
* (e.g. FlannBasedMatcher trains flann::Index). So nonempty implementation
|
example, FlannBasedMatcher trains flann::Index ).
|
||||||
* of train() should check the class object state and do traing/retraining
|
|
||||||
* only if the state requires that (e.g. FlannBasedMatcher trains flann::Index
|
|
||||||
* if it has not trained yet or if new descriptors have been added to the train
|
|
||||||
* collection).
|
|
||||||
*/
|
*/
|
||||||
CV_WRAP virtual void train();
|
CV_WRAP virtual void train();
|
||||||
/*
|
|
||||||
* Group of methods to match descriptors from image pair.
|
/** @brief Finds the best match for each descriptor from a query set.
|
||||||
* Method train() is run in this methods.
|
|
||||||
|
@param queryDescriptors Query set of descriptors.
|
||||||
|
@param trainDescriptors Train set of descriptors. This set is not added to the train descriptors
|
||||||
|
collection stored in the class object.
|
||||||
|
@param matches Matches. If a query descriptor is masked out in mask , no match is added for this
|
||||||
|
descriptor. So, matches size may be smaller than the query descriptors count.
|
||||||
|
@param mask Mask specifying permissible matches between an input query and train matrices of
|
||||||
|
descriptors.
|
||||||
|
|
||||||
|
In the first variant of this method, the train descriptors are passed as an input argument. In the
|
||||||
|
second variant of the method, train descriptors collection that was set by DescriptorMatcher::add is
|
||||||
|
used. Optional mask (or masks) can be passed to specify which query and training descriptors can be
|
||||||
|
matched. Namely, queryDescriptors[i] can be matched with trainDescriptors[j] only if
|
||||||
|
mask.at\<uchar\>(i,j) is non-zero.
|
||||||
*/
|
*/
|
||||||
// Find one best match for each query descriptor (if mask is empty).
|
|
||||||
CV_WRAP void match( InputArray queryDescriptors, InputArray trainDescriptors,
|
CV_WRAP void match( InputArray queryDescriptors, InputArray trainDescriptors,
|
||||||
CV_OUT std::vector<DMatch>& matches, InputArray mask=noArray() ) const;
|
CV_OUT std::vector<DMatch>& matches, InputArray mask=noArray() ) const;
|
||||||
// Find k best matches for each query descriptor (in increasing order of distances).
|
|
||||||
// compactResult is used when mask is not empty. If compactResult is false matches
|
/** @brief Finds the k best matches for each descriptor from a query set.
|
||||||
// vector will have the same size as queryDescriptors rows. If compactResult is true
|
|
||||||
// matches vector will not contain matches for fully masked out query descriptors.
|
@param queryDescriptors Query set of descriptors.
|
||||||
|
@param trainDescriptors Train set of descriptors. This set is not added to the train descriptors
|
||||||
|
collection stored in the class object.
|
||||||
|
@param mask Mask specifying permissible matches between an input query and train matrices of
|
||||||
|
descriptors.
|
||||||
|
@param matches Matches. Each matches[i] is k or less matches for the same query descriptor.
|
||||||
|
@param k Count of best matches found per each query descriptor or less if a query descriptor has
|
||||||
|
less than k possible matches in total.
|
||||||
|
@param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is
|
||||||
|
false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,
|
||||||
|
the matches vector does not contain matches for fully masked-out query descriptors.
|
||||||
|
|
||||||
|
These extended variants of DescriptorMatcher::match methods find several best matches for each query
|
||||||
|
descriptor. The matches are returned in the distance increasing order. See DescriptorMatcher::match
|
||||||
|
for the details about query and train descriptors.
|
||||||
|
*/
|
||||||
CV_WRAP void knnMatch( InputArray queryDescriptors, InputArray trainDescriptors,
|
CV_WRAP void knnMatch( InputArray queryDescriptors, InputArray trainDescriptors,
|
||||||
CV_OUT std::vector<std::vector<DMatch> >& matches, int k,
|
CV_OUT std::vector<std::vector<DMatch> >& matches, int k,
|
||||||
InputArray mask=noArray(), bool compactResult=false ) const;
|
InputArray mask=noArray(), bool compactResult=false ) const;
|
||||||
// Find best matches for each query descriptor which have distance less than
|
|
||||||
// maxDistance (in increasing order of distances).
|
/** @brief For each query descriptor, finds the training descriptors not farther than the specified distance.
|
||||||
|
|
||||||
|
@param queryDescriptors Query set of descriptors.
|
||||||
|
@param trainDescriptors Train set of descriptors. This set is not added to the train descriptors
|
||||||
|
collection stored in the class object.
|
||||||
|
@param matches Found matches.
|
||||||
|
@param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is
|
||||||
|
false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,
|
||||||
|
the matches vector does not contain matches for fully masked-out query descriptors.
|
||||||
|
@param maxDistance Threshold for the distance between matched descriptors. Distance means here
|
||||||
|
metric distance (e.g. Hamming distance), not the distance between coordinates (which is measured
|
||||||
|
in Pixels)!
|
||||||
|
@param mask Mask specifying permissible matches between an input query and train matrices of
|
||||||
|
descriptors.
|
||||||
|
|
||||||
|
For each query descriptor, the methods find such training descriptors that the distance between the
|
||||||
|
query descriptor and the training descriptor is equal or smaller than maxDistance. Found matches are
|
||||||
|
returned in the distance increasing order.
|
||||||
|
*/
|
||||||
void radiusMatch( InputArray queryDescriptors, InputArray trainDescriptors,
|
void radiusMatch( InputArray queryDescriptors, InputArray trainDescriptors,
|
||||||
std::vector<std::vector<DMatch> >& matches, float maxDistance,
|
std::vector<std::vector<DMatch> >& matches, float maxDistance,
|
||||||
InputArray mask=noArray(), bool compactResult=false ) const;
|
InputArray mask=noArray(), bool compactResult=false ) const;
|
||||||
/*
|
|
||||||
* Group of methods to match descriptors from one image to image set.
|
/** @overload
|
||||||
* See description of similar methods for matching image pair above.
|
@param queryDescriptors Query set of descriptors.
|
||||||
|
@param matches Matches. If a query descriptor is masked out in mask , no match is added for this
|
||||||
|
descriptor. So, matches size may be smaller than the query descriptors count.
|
||||||
|
@param masks Set of masks. Each masks[i] specifies permissible matches between the input query
|
||||||
|
descriptors and stored train descriptors from the i-th image trainDescCollection[i].
|
||||||
*/
|
*/
|
||||||
CV_WRAP void match( InputArray queryDescriptors, CV_OUT std::vector<DMatch>& matches,
|
CV_WRAP void match( InputArray queryDescriptors, CV_OUT std::vector<DMatch>& matches,
|
||||||
InputArrayOfArrays masks=noArray() );
|
InputArrayOfArrays masks=noArray() );
|
||||||
|
/** @overload
|
||||||
|
@param queryDescriptors Query set of descriptors.
|
||||||
|
@param matches Matches. Each matches[i] is k or less matches for the same query descriptor.
|
||||||
|
@param k Count of best matches found per each query descriptor or less if a query descriptor has
|
||||||
|
less than k possible matches in total.
|
||||||
|
@param masks Set of masks. Each masks[i] specifies permissible matches between the input query
|
||||||
|
descriptors and stored train descriptors from the i-th image trainDescCollection[i].
|
||||||
|
@param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is
|
||||||
|
false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,
|
||||||
|
the matches vector does not contain matches for fully masked-out query descriptors.
|
||||||
|
*/
|
||||||
CV_WRAP void knnMatch( InputArray queryDescriptors, CV_OUT std::vector<std::vector<DMatch> >& matches, int k,
|
CV_WRAP void knnMatch( InputArray queryDescriptors, CV_OUT std::vector<std::vector<DMatch> >& matches, int k,
|
||||||
InputArrayOfArrays masks=noArray(), bool compactResult=false );
|
InputArrayOfArrays masks=noArray(), bool compactResult=false );
|
||||||
|
/** @overload
|
||||||
|
@param queryDescriptors Query set of descriptors.
|
||||||
|
@param matches Found matches.
|
||||||
|
@param maxDistance Threshold for the distance between matched descriptors. Distance means here
|
||||||
|
metric distance (e.g. Hamming distance), not the distance between coordinates (which is measured
|
||||||
|
in Pixels)!
|
||||||
|
@param masks Set of masks. Each masks[i] specifies permissible matches between the input query
|
||||||
|
descriptors and stored train descriptors from the i-th image trainDescCollection[i].
|
||||||
|
@param compactResult Parameter used when the mask (or masks) is not empty. If compactResult is
|
||||||
|
false, the matches vector has the same size as queryDescriptors rows. If compactResult is true,
|
||||||
|
the matches vector does not contain matches for fully masked-out query descriptors.
|
||||||
|
*/
|
||||||
void radiusMatch( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,
|
void radiusMatch( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,
|
||||||
InputArrayOfArrays masks=noArray(), bool compactResult=false );
|
InputArrayOfArrays masks=noArray(), bool compactResult=false );
|
||||||
|
|
||||||
@ -579,14 +869,28 @@ public:
|
|||||||
// Writes matcher object to a file storage
|
// Writes matcher object to a file storage
|
||||||
virtual void write( FileStorage& ) const;
|
virtual void write( FileStorage& ) const;
|
||||||
|
|
||||||
// Clone the matcher. If emptyTrainData is false the method create deep copy of the object, i.e. copies
|
/** @brief Clones the matcher.
|
||||||
// both parameters and train data. If emptyTrainData is true the method create object copy with current parameters
|
|
||||||
// but with empty train data.
|
@param emptyTrainData If emptyTrainData is false, the method creates a deep copy of the object,
|
||||||
|
that is, copies both parameters and train data. If emptyTrainData is true, the method creates an
|
||||||
|
object copy with the current parameters but with empty train data.
|
||||||
|
*/
|
||||||
virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const = 0;
|
virtual Ptr<DescriptorMatcher> clone( bool emptyTrainData=false ) const = 0;
|
||||||
|
|
||||||
|
/** @brief Creates a descriptor matcher of a given type with the default parameters (using default
|
||||||
|
constructor).
|
||||||
|
|
||||||
|
@param descriptorMatcherType Descriptor matcher type. Now the following matcher types are
|
||||||
|
supported:
|
||||||
|
- `BruteForce` (it uses L2 )
|
||||||
|
- `BruteForce-L1`
|
||||||
|
- `BruteForce-Hamming`
|
||||||
|
- `BruteForce-Hamming(2)`
|
||||||
|
- `FlannBased`
|
||||||
|
*/
|
||||||
CV_WRAP static Ptr<DescriptorMatcher> create( const String& descriptorMatcherType );
|
CV_WRAP static Ptr<DescriptorMatcher> create( const String& descriptorMatcherType );
|
||||||
protected:
|
protected:
|
||||||
/*
|
/**
|
||||||
* Class to work with descriptors from several images as with one merged matrix.
|
* Class to work with descriptors from several images as with one merged matrix.
|
||||||
* It is used e.g. in FlannBasedMatcher.
|
* It is used e.g. in FlannBasedMatcher.
|
||||||
*/
|
*/
|
||||||
@ -613,9 +917,9 @@ protected:
|
|||||||
std::vector<int> startIdxs;
|
std::vector<int> startIdxs;
|
||||||
};
|
};
|
||||||
|
|
||||||
// In fact the matching is implemented only by the following two methods. These methods suppose
|
//! In fact the matching is implemented only by the following two methods. These methods suppose
|
||||||
// that the class object has been trained already. Public match methods call these methods
|
//! that the class object has been trained already. Public match methods call these methods
|
||||||
// after calling train().
|
//! after calling train().
|
||||||
virtual void knnMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k,
|
virtual void knnMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, int k,
|
||||||
InputArrayOfArrays masks=noArray(), bool compactResult=false ) = 0;
|
InputArrayOfArrays masks=noArray(), bool compactResult=false ) = 0;
|
||||||
virtual void radiusMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,
|
virtual void radiusMatchImpl( InputArray queryDescriptors, std::vector<std::vector<DMatch> >& matches, float maxDistance,
|
||||||
@ -627,23 +931,33 @@ protected:
|
|||||||
static Mat clone_op( Mat m ) { return m.clone(); }
|
static Mat clone_op( Mat m ) { return m.clone(); }
|
||||||
void checkMasks( InputArrayOfArrays masks, int queryDescriptorsCount ) const;
|
void checkMasks( InputArrayOfArrays masks, int queryDescriptorsCount ) const;
|
||||||
|
|
||||||
// Collection of descriptors from train images.
|
//! Collection of descriptors from train images.
|
||||||
std::vector<Mat> trainDescCollection;
|
std::vector<Mat> trainDescCollection;
|
||||||
std::vector<UMat> utrainDescCollection;
|
std::vector<UMat> utrainDescCollection;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/** @brief Brute-force descriptor matcher.
|
||||||
* Brute-force descriptor matcher.
|
|
||||||
*
|
For each descriptor in the first set, this matcher finds the closest descriptor in the second set
|
||||||
* For each descriptor in the first set, this matcher finds the closest
|
by trying each one. This descriptor matcher supports masking permissible matches of descriptor
|
||||||
* descriptor in the second set by trying each one.
|
sets.
|
||||||
*
|
|
||||||
* For efficiency, BruteForceMatcher is templated on the distance metric.
|
|
||||||
* For float descriptors, a common choice would be cv::L2<float>.
|
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W BFMatcher : public DescriptorMatcher
|
class CV_EXPORTS_W BFMatcher : public DescriptorMatcher
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief Brute-force matcher constructor.
|
||||||
|
|
||||||
|
@param normType One of NORM_L1, NORM_L2, NORM_HAMMING, NORM_HAMMING2. L1 and L2 norms are
|
||||||
|
preferable choices for SIFT and SURF descriptors, NORM_HAMMING should be used with ORB, BRISK and
|
||||||
|
BRIEF, NORM_HAMMING2 should be used with ORB when WTA_K==3 or 4 (see ORB::ORB constructor
|
||||||
|
description).
|
||||||
|
@param crossCheck If it is false, this is will be default BFMatcher behaviour when it finds the k
|
||||||
|
nearest neighbors for each query descriptor. If crossCheck==true, then the knnMatch() method with
|
||||||
|
k=1 will only return pairs (i,j) such that for i-th query descriptor the j-th descriptor in the
|
||||||
|
matcher's collection is the nearest and vice versa, i.e. the BFMatcher will only return consistent
|
||||||
|
pairs. Such technique usually produces best results with minimal number of outliers when there are
|
||||||
|
enough matches. This is alternative to the ratio test, used by D. Lowe in SIFT paper.
|
||||||
|
*/
|
||||||
CV_WRAP BFMatcher( int normType=NORM_L2, bool crossCheck=false );
|
CV_WRAP BFMatcher( int normType=NORM_L2, bool crossCheck=false );
|
||||||
virtual ~BFMatcher() {}
|
virtual ~BFMatcher() {}
|
||||||
|
|
||||||
@ -661,8 +975,12 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/** @brief Flann-based descriptor matcher.
|
||||||
* Flann based matcher
|
|
||||||
|
This matcher trains flann::Index_ on a train descriptor collection and calls its nearest search
|
||||||
|
methods to find the best matches. So, this matcher may be faster when matching a large train
|
||||||
|
collection than the brute force matcher. FlannBasedMatcher does not support masking permissible
|
||||||
|
matches of descriptor sets because flann::Index does not support this. :
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W FlannBasedMatcher : public DescriptorMatcher
|
class CV_EXPORTS_W FlannBasedMatcher : public DescriptorMatcher
|
||||||
{
|
{
|
||||||
@ -700,42 +1018,85 @@ protected:
|
|||||||
int addedDescCount;
|
int addedDescCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} features2d_match
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* Drawing functions *
|
* Drawing functions *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
|
|
||||||
|
//! @addtogroup features2d_draw
|
||||||
|
//! @{
|
||||||
|
|
||||||
struct CV_EXPORTS DrawMatchesFlags
|
struct CV_EXPORTS DrawMatchesFlags
|
||||||
{
|
{
|
||||||
enum{ DEFAULT = 0, // Output image matrix will be created (Mat::create),
|
enum{ DEFAULT = 0, //!< Output image matrix will be created (Mat::create),
|
||||||
// i.e. existing memory of output image may be reused.
|
//!< i.e. existing memory of output image may be reused.
|
||||||
// Two source image, matches and single keypoints will be drawn.
|
//!< Two source image, matches and single keypoints will be drawn.
|
||||||
// For each keypoint only the center point will be drawn (without
|
//!< For each keypoint only the center point will be drawn (without
|
||||||
// the circle around keypoint with keypoint size and orientation).
|
//!< the circle around keypoint with keypoint size and orientation).
|
||||||
DRAW_OVER_OUTIMG = 1, // Output image matrix will not be created (Mat::create).
|
DRAW_OVER_OUTIMG = 1, //!< Output image matrix will not be created (Mat::create).
|
||||||
// Matches will be drawn on existing content of output image.
|
//!< Matches will be drawn on existing content of output image.
|
||||||
NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn.
|
NOT_DRAW_SINGLE_POINTS = 2, //!< Single keypoints will not be drawn.
|
||||||
DRAW_RICH_KEYPOINTS = 4 // For each keypoint the circle around keypoint with keypoint size and
|
DRAW_RICH_KEYPOINTS = 4 //!< For each keypoint the circle around keypoint with keypoint size and
|
||||||
// orientation will be drawn.
|
//!< orientation will be drawn.
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Draw keypoints.
|
/** @brief Draws keypoints.
|
||||||
|
|
||||||
|
@param image Source image.
|
||||||
|
@param keypoints Keypoints from the source image.
|
||||||
|
@param outImage Output image. Its content depends on the flags value defining what is drawn in the
|
||||||
|
output image. See possible flags bit values below.
|
||||||
|
@param color Color of keypoints.
|
||||||
|
@param flags Flags setting drawing features. Possible flags bit values are defined by
|
||||||
|
DrawMatchesFlags. See details above in drawMatches .
|
||||||
|
|
||||||
|
@note
|
||||||
|
For Python API, flags are modified as cv2.DRAW_MATCHES_FLAGS_DEFAULT,
|
||||||
|
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG,
|
||||||
|
cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void drawKeypoints( InputArray image, const std::vector<KeyPoint>& keypoints, InputOutputArray outImage,
|
CV_EXPORTS_W void drawKeypoints( InputArray image, const std::vector<KeyPoint>& keypoints, InputOutputArray outImage,
|
||||||
const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT );
|
const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT );
|
||||||
|
|
||||||
// Draws matches of keypints from two images on output image.
|
/** @brief Draws the found matches of keypoints from two images.
|
||||||
|
|
||||||
|
@param img1 First source image.
|
||||||
|
@param keypoints1 Keypoints from the first source image.
|
||||||
|
@param img2 Second source image.
|
||||||
|
@param keypoints2 Keypoints from the second source image.
|
||||||
|
@param matches1to2 Matches from the first image to the second one, which means that keypoints1[i]
|
||||||
|
has a corresponding point in keypoints2[matches[i]] .
|
||||||
|
@param outImg Output image. Its content depends on the flags value defining what is drawn in the
|
||||||
|
output image. See possible flags bit values below.
|
||||||
|
@param matchColor Color of matches (lines and connected keypoints). If matchColor==Scalar::all(-1)
|
||||||
|
, the color is generated randomly.
|
||||||
|
@param singlePointColor Color of single keypoints (circles), which means that keypoints do not
|
||||||
|
have the matches. If singlePointColor==Scalar::all(-1) , the color is generated randomly.
|
||||||
|
@param matchesMask Mask determining which matches are drawn. If the mask is empty, all matches are
|
||||||
|
drawn.
|
||||||
|
@param flags Flags setting drawing features. Possible flags bit values are defined by
|
||||||
|
DrawMatchesFlags.
|
||||||
|
|
||||||
|
This function draws matches of keypoints from two images in the output image. Match is a line
|
||||||
|
connecting two keypoints (circles). See cv::DrawMatchesFlags.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
|
CV_EXPORTS_W void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
|
||||||
InputArray img2, const std::vector<KeyPoint>& keypoints2,
|
InputArray img2, const std::vector<KeyPoint>& keypoints2,
|
||||||
const std::vector<DMatch>& matches1to2, InputOutputArray outImg,
|
const std::vector<DMatch>& matches1to2, InputOutputArray outImg,
|
||||||
const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),
|
const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),
|
||||||
const std::vector<char>& matchesMask=std::vector<char>(), int flags=DrawMatchesFlags::DEFAULT );
|
const std::vector<char>& matchesMask=std::vector<char>(), int flags=DrawMatchesFlags::DEFAULT );
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
CV_EXPORTS_AS(drawMatchesKnn) void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
|
CV_EXPORTS_AS(drawMatchesKnn) void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
|
||||||
InputArray img2, const std::vector<KeyPoint>& keypoints2,
|
InputArray img2, const std::vector<KeyPoint>& keypoints2,
|
||||||
const std::vector<std::vector<DMatch> >& matches1to2, InputOutputArray outImg,
|
const std::vector<std::vector<DMatch> >& matches1to2, InputOutputArray outImg,
|
||||||
const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),
|
const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),
|
||||||
const std::vector<std::vector<char> >& matchesMask=std::vector<std::vector<char> >(), int flags=DrawMatchesFlags::DEFAULT );
|
const std::vector<std::vector<char> >& matchesMask=std::vector<std::vector<char> >(), int flags=DrawMatchesFlags::DEFAULT );
|
||||||
|
|
||||||
|
//! @} features2d_draw
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* Functions to evaluate the feature detectors and [generic] descriptor extractors *
|
* Functions to evaluate the feature detectors and [generic] descriptor extractors *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
@ -755,8 +1116,14 @@ CV_EXPORTS int getNearestPoint( const std::vector<Point2f>& recallPrecisionCurve
|
|||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* Bag of visual words *
|
* Bag of visual words *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
/*
|
|
||||||
* Abstract base class for training of a 'bag of visual words' vocabulary from a set of descriptors
|
//! @addtogroup features2d_category
|
||||||
|
//! @{
|
||||||
|
|
||||||
|
/** @brief Abstract base class for training the *bag of visual words* vocabulary from a set of descriptors.
|
||||||
|
|
||||||
|
For details, see, for example, *Visual Categorization with Bags of Keypoints* by Gabriella Csurka,
|
||||||
|
Christopher R. Dance, Lixin Fan, Jutta Willamowski, Cedric Bray, 2004. :
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W BOWTrainer
|
class CV_EXPORTS_W BOWTrainer
|
||||||
{
|
{
|
||||||
@ -764,20 +1131,37 @@ public:
|
|||||||
BOWTrainer();
|
BOWTrainer();
|
||||||
virtual ~BOWTrainer();
|
virtual ~BOWTrainer();
|
||||||
|
|
||||||
|
/** @brief Adds descriptors to a training set.
|
||||||
|
|
||||||
|
@param descriptors Descriptors to add to a training set. Each row of the descriptors matrix is a
|
||||||
|
descriptor.
|
||||||
|
|
||||||
|
The training set is clustered using clustermethod to construct the vocabulary.
|
||||||
|
*/
|
||||||
CV_WRAP void add( const Mat& descriptors );
|
CV_WRAP void add( const Mat& descriptors );
|
||||||
|
|
||||||
|
/** @brief Returns a training set of descriptors.
|
||||||
|
*/
|
||||||
CV_WRAP const std::vector<Mat>& getDescriptors() const;
|
CV_WRAP const std::vector<Mat>& getDescriptors() const;
|
||||||
|
|
||||||
|
/** @brief Returns the count of all descriptors stored in the training set.
|
||||||
|
*/
|
||||||
CV_WRAP int descriptorsCount() const;
|
CV_WRAP int descriptorsCount() const;
|
||||||
|
|
||||||
CV_WRAP virtual void clear();
|
CV_WRAP virtual void clear();
|
||||||
|
|
||||||
/*
|
/** @overload */
|
||||||
* Train visual words vocabulary, that is cluster training descriptors and
|
|
||||||
* compute cluster centers.
|
|
||||||
* Returns cluster centers.
|
|
||||||
*
|
|
||||||
* descriptors Training descriptors computed on images keypoints.
|
|
||||||
*/
|
|
||||||
CV_WRAP virtual Mat cluster() const = 0;
|
CV_WRAP virtual Mat cluster() const = 0;
|
||||||
|
|
||||||
|
/** @brief Clusters train descriptors.
|
||||||
|
|
||||||
|
@param descriptors Descriptors to cluster. Each row of the descriptors matrix is a descriptor.
|
||||||
|
Descriptors are not added to the inner train descriptor set.
|
||||||
|
|
||||||
|
The vocabulary consists of cluster centers. So, this method returns the vocabulary. In the first
|
||||||
|
variant of the method, train descriptors stored in the object are clustered. In the second variant,
|
||||||
|
input descriptors are clustered.
|
||||||
|
*/
|
||||||
CV_WRAP virtual Mat cluster( const Mat& descriptors ) const = 0;
|
CV_WRAP virtual Mat cluster( const Mat& descriptors ) const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -785,12 +1169,15 @@ protected:
|
|||||||
int size;
|
int size;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/** @brief kmeans -based class to train visual vocabulary using the *bag of visual words* approach. :
|
||||||
* This is BOWTrainer using cv::kmeans to get vocabulary.
|
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W BOWKMeansTrainer : public BOWTrainer
|
class CV_EXPORTS_W BOWKMeansTrainer : public BOWTrainer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief The constructor.
|
||||||
|
|
||||||
|
@see cv::kmeans
|
||||||
|
*/
|
||||||
CV_WRAP BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),
|
CV_WRAP BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(),
|
||||||
int attempts=3, int flags=KMEANS_PP_CENTERS );
|
int attempts=3, int flags=KMEANS_PP_CENTERS );
|
||||||
virtual ~BOWKMeansTrainer();
|
virtual ~BOWKMeansTrainer();
|
||||||
@ -807,21 +1194,62 @@ protected:
|
|||||||
int flags;
|
int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/** @brief Class to compute an image descriptor using the *bag of visual words*.
|
||||||
* Class to compute image descriptor using bag of visual words.
|
|
||||||
|
Such a computation consists of the following steps:
|
||||||
|
|
||||||
|
1. Compute descriptors for a given image and its keypoints set.
|
||||||
|
2. Find the nearest visual words from the vocabulary for each keypoint descriptor.
|
||||||
|
3. Compute the bag-of-words image descriptor as is a normalized histogram of vocabulary words
|
||||||
|
encountered in the image. The i-th bin of the histogram is a frequency of i-th word of the
|
||||||
|
vocabulary in the given image.
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS_W BOWImgDescriptorExtractor
|
class CV_EXPORTS_W BOWImgDescriptorExtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/** @brief The constructor.
|
||||||
|
|
||||||
|
@param dextractor Descriptor extractor that is used to compute descriptors for an input image and
|
||||||
|
its keypoints.
|
||||||
|
@param dmatcher Descriptor matcher that is used to find the nearest word of the trained vocabulary
|
||||||
|
for each keypoint descriptor of the image.
|
||||||
|
*/
|
||||||
CV_WRAP BOWImgDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor,
|
CV_WRAP BOWImgDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor,
|
||||||
const Ptr<DescriptorMatcher>& dmatcher );
|
const Ptr<DescriptorMatcher>& dmatcher );
|
||||||
|
/** @overload */
|
||||||
BOWImgDescriptorExtractor( const Ptr<DescriptorMatcher>& dmatcher );
|
BOWImgDescriptorExtractor( const Ptr<DescriptorMatcher>& dmatcher );
|
||||||
virtual ~BOWImgDescriptorExtractor();
|
virtual ~BOWImgDescriptorExtractor();
|
||||||
|
|
||||||
|
/** @brief Sets a visual vocabulary.
|
||||||
|
|
||||||
|
@param vocabulary Vocabulary (can be trained using the inheritor of BOWTrainer ). Each row of the
|
||||||
|
vocabulary is a visual word (cluster center).
|
||||||
|
*/
|
||||||
CV_WRAP void setVocabulary( const Mat& vocabulary );
|
CV_WRAP void setVocabulary( const Mat& vocabulary );
|
||||||
|
|
||||||
|
/** @brief Returns the set vocabulary.
|
||||||
|
*/
|
||||||
CV_WRAP const Mat& getVocabulary() const;
|
CV_WRAP const Mat& getVocabulary() const;
|
||||||
|
|
||||||
|
/** @brief Computes an image descriptor using the set visual vocabulary.
|
||||||
|
|
||||||
|
@param image Image, for which the descriptor is computed.
|
||||||
|
@param keypoints Keypoints detected in the input image.
|
||||||
|
@param imgDescriptor Computed output image descriptor.
|
||||||
|
@param pointIdxsOfClusters Indices of keypoints that belong to the cluster. This means that
|
||||||
|
pointIdxsOfClusters[i] are keypoint indices that belong to the i -th cluster (word of vocabulary)
|
||||||
|
returned if it is non-zero.
|
||||||
|
@param descriptors Descriptors of the image keypoints that are returned if they are non-zero.
|
||||||
|
*/
|
||||||
void compute( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray imgDescriptor,
|
void compute( InputArray image, std::vector<KeyPoint>& keypoints, OutputArray imgDescriptor,
|
||||||
std::vector<std::vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0 );
|
std::vector<std::vector<int> >* pointIdxsOfClusters=0, Mat* descriptors=0 );
|
||||||
|
/** @overload
|
||||||
|
@param keypointDescriptors Computed descriptors to match with vocabulary.
|
||||||
|
@param imgDescriptor Computed output image descriptor.
|
||||||
|
@param pointIdxsOfClusters Indices of keypoints that belong to the cluster. This means that
|
||||||
|
pointIdxsOfClusters[i] are keypoint indices that belong to the i -th cluster (word of vocabulary)
|
||||||
|
returned if it is non-zero.
|
||||||
|
*/
|
||||||
void compute( InputArray keypointDescriptors, OutputArray imgDescriptor,
|
void compute( InputArray keypointDescriptors, OutputArray imgDescriptor,
|
||||||
std::vector<std::vector<int> >* pointIdxsOfClusters=0 );
|
std::vector<std::vector<int> >* pointIdxsOfClusters=0 );
|
||||||
// compute() is not constant because DescriptorMatcher::match is not constant
|
// compute() is not constant because DescriptorMatcher::match is not constant
|
||||||
@ -829,7 +1257,12 @@ public:
|
|||||||
CV_WRAP_AS(compute) void compute2( const Mat& image, std::vector<KeyPoint>& keypoints, CV_OUT Mat& imgDescriptor )
|
CV_WRAP_AS(compute) void compute2( const Mat& image, std::vector<KeyPoint>& keypoints, CV_OUT Mat& imgDescriptor )
|
||||||
{ compute(image,keypoints,imgDescriptor); }
|
{ compute(image,keypoints,imgDescriptor); }
|
||||||
|
|
||||||
|
/** @brief Returns an image descriptor size if the vocabulary is set. Otherwise, it returns 0.
|
||||||
|
*/
|
||||||
CV_WRAP int descriptorSize() const;
|
CV_WRAP int descriptorSize() const;
|
||||||
|
|
||||||
|
/** @brief Returns an image descriptor type.
|
||||||
|
*/
|
||||||
CV_WRAP int descriptorType() const;
|
CV_WRAP int descriptorType() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -838,6 +1271,10 @@ protected:
|
|||||||
Ptr<DescriptorMatcher> dmatcher;
|
Ptr<DescriptorMatcher> dmatcher;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} features2d_category
|
||||||
|
|
||||||
|
//! @} features2d
|
||||||
|
|
||||||
} /* namespace cv */
|
} /* namespace cv */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,6 +47,15 @@
|
|||||||
#include "opencv2/flann/miniflann.hpp"
|
#include "opencv2/flann/miniflann.hpp"
|
||||||
#include "opencv2/flann/flann_base.hpp"
|
#include "opencv2/flann/flann_base.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@defgroup flann Clustering and Search in Multi-Dimensional Spaces
|
||||||
|
|
||||||
|
This section documents OpenCV's interface to the FLANN library. FLANN (Fast Library for Approximate
|
||||||
|
Nearest Neighbors) is a library that contains a collection of algorithms optimized for fast nearest
|
||||||
|
neighbor search in large datasets and for high dimensional features. More information about FLANN
|
||||||
|
can be found in @cite Muja2009 .
|
||||||
|
*/
|
||||||
|
|
||||||
namespace cvflann
|
namespace cvflann
|
||||||
{
|
{
|
||||||
CV_EXPORTS flann_distance_t flann_distance_type();
|
CV_EXPORTS flann_distance_t flann_distance_type();
|
||||||
@ -59,6 +68,10 @@ namespace cv
|
|||||||
namespace flann
|
namespace flann
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
//! @addtogroup flann
|
||||||
|
//! @{
|
||||||
|
|
||||||
template <typename T> struct CvType {};
|
template <typename T> struct CvType {};
|
||||||
template <> struct CvType<unsigned char> { static int type() { return CV_8U; } };
|
template <> struct CvType<unsigned char> { static int type() { return CV_8U; } };
|
||||||
template <> struct CvType<char> { static int type() { return CV_8S; } };
|
template <> struct CvType<char> { static int type() { return CV_8S; } };
|
||||||
@ -88,7 +101,9 @@ using ::cvflann::ChiSquareDistance;
|
|||||||
using ::cvflann::KL_Divergence;
|
using ::cvflann::KL_Divergence;
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief The FLANN nearest neighbor index class. This class is templated with the type of elements for which
|
||||||
|
the index is built.
|
||||||
|
*/
|
||||||
template <typename Distance>
|
template <typename Distance>
|
||||||
class GenericIndex
|
class GenericIndex
|
||||||
{
|
{
|
||||||
@ -96,10 +111,108 @@ public:
|
|||||||
typedef typename Distance::ElementType ElementType;
|
typedef typename Distance::ElementType ElementType;
|
||||||
typedef typename Distance::ResultType DistanceType;
|
typedef typename Distance::ResultType DistanceType;
|
||||||
|
|
||||||
|
/** @brief Constructs a nearest neighbor search index for a given dataset.
|
||||||
|
|
||||||
|
@param features Matrix of containing the features(points) to index. The size of the matrix is
|
||||||
|
num_features x feature_dimensionality and the data type of the elements in the matrix must
|
||||||
|
coincide with the type of the index.
|
||||||
|
@param params Structure containing the index parameters. The type of index that will be
|
||||||
|
constructed depends on the type of this parameter. See the description.
|
||||||
|
@param distance
|
||||||
|
|
||||||
|
The method constructs a fast search structure from a set of features using the specified algorithm
|
||||||
|
with specified parameters, as defined by params. params is a reference to one of the following class
|
||||||
|
IndexParams descendants:
|
||||||
|
|
||||||
|
- **LinearIndexParams** When passing an object of this type, the index will perform a linear,
|
||||||
|
brute-force search. :
|
||||||
|
@code
|
||||||
|
struct LinearIndexParams : public IndexParams
|
||||||
|
{
|
||||||
|
};
|
||||||
|
@endcode
|
||||||
|
- **KDTreeIndexParams** When passing an object of this type the index constructed will consist of
|
||||||
|
a set of randomized kd-trees which will be searched in parallel. :
|
||||||
|
@code
|
||||||
|
struct KDTreeIndexParams : public IndexParams
|
||||||
|
{
|
||||||
|
KDTreeIndexParams( int trees = 4 );
|
||||||
|
};
|
||||||
|
@endcode
|
||||||
|
- **KMeansIndexParams** When passing an object of this type the index constructed will be a
|
||||||
|
hierarchical k-means tree. :
|
||||||
|
@code
|
||||||
|
struct KMeansIndexParams : public IndexParams
|
||||||
|
{
|
||||||
|
KMeansIndexParams(
|
||||||
|
int branching = 32,
|
||||||
|
int iterations = 11,
|
||||||
|
flann_centers_init_t centers_init = CENTERS_RANDOM,
|
||||||
|
float cb_index = 0.2 );
|
||||||
|
};
|
||||||
|
@endcode
|
||||||
|
- **CompositeIndexParams** When using a parameters object of this type the index created
|
||||||
|
combines the randomized kd-trees and the hierarchical k-means tree. :
|
||||||
|
@code
|
||||||
|
struct CompositeIndexParams : public IndexParams
|
||||||
|
{
|
||||||
|
CompositeIndexParams(
|
||||||
|
int trees = 4,
|
||||||
|
int branching = 32,
|
||||||
|
int iterations = 11,
|
||||||
|
flann_centers_init_t centers_init = CENTERS_RANDOM,
|
||||||
|
float cb_index = 0.2 );
|
||||||
|
};
|
||||||
|
@endcode
|
||||||
|
- **LshIndexParams** When using a parameters object of this type the index created uses
|
||||||
|
multi-probe LSH (by Multi-Probe LSH: Efficient Indexing for High-Dimensional Similarity Search
|
||||||
|
by Qin Lv, William Josephson, Zhe Wang, Moses Charikar, Kai Li., Proceedings of the 33rd
|
||||||
|
International Conference on Very Large Data Bases (VLDB). Vienna, Austria. September 2007) :
|
||||||
|
@code
|
||||||
|
struct LshIndexParams : public IndexParams
|
||||||
|
{
|
||||||
|
LshIndexParams(
|
||||||
|
unsigned int table_number,
|
||||||
|
unsigned int key_size,
|
||||||
|
unsigned int multi_probe_level );
|
||||||
|
};
|
||||||
|
@endcode
|
||||||
|
- **AutotunedIndexParams** When passing an object of this type the index created is
|
||||||
|
automatically tuned to offer the best performance, by choosing the optimal index type
|
||||||
|
(randomized kd-trees, hierarchical kmeans, linear) and parameters for the dataset provided. :
|
||||||
|
@code
|
||||||
|
struct AutotunedIndexParams : public IndexParams
|
||||||
|
{
|
||||||
|
AutotunedIndexParams(
|
||||||
|
float target_precision = 0.9,
|
||||||
|
float build_weight = 0.01,
|
||||||
|
float memory_weight = 0,
|
||||||
|
float sample_fraction = 0.1 );
|
||||||
|
};
|
||||||
|
@endcode
|
||||||
|
- **SavedIndexParams** This object type is used for loading a previously saved index from the
|
||||||
|
disk. :
|
||||||
|
@code
|
||||||
|
struct SavedIndexParams : public IndexParams
|
||||||
|
{
|
||||||
|
SavedIndexParams( String filename );
|
||||||
|
};
|
||||||
|
@endcode
|
||||||
|
*/
|
||||||
GenericIndex(const Mat& features, const ::cvflann::IndexParams& params, Distance distance = Distance());
|
GenericIndex(const Mat& features, const ::cvflann::IndexParams& params, Distance distance = Distance());
|
||||||
|
|
||||||
~GenericIndex();
|
~GenericIndex();
|
||||||
|
|
||||||
|
/** @brief Performs a K-nearest neighbor search for a given query point using the index.
|
||||||
|
|
||||||
|
@param query The query point
|
||||||
|
@param indices Vector that will contain the indices of the K-nearest neighbors found. It must have
|
||||||
|
at least knn size.
|
||||||
|
@param dists Vector that will contain the distances to the K-nearest neighbors found. It must have
|
||||||
|
at least knn size.
|
||||||
|
@param knn Number of nearest neighbors to search for.
|
||||||
|
@param params SearchParams
|
||||||
|
*/
|
||||||
void knnSearch(const std::vector<ElementType>& query, std::vector<int>& indices,
|
void knnSearch(const std::vector<ElementType>& query, std::vector<int>& indices,
|
||||||
std::vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);
|
std::vector<DistanceType>& dists, int knn, const ::cvflann::SearchParams& params);
|
||||||
void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);
|
void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params);
|
||||||
@ -123,6 +236,7 @@ private:
|
|||||||
::cvflann::Index<Distance>* nnIndex;
|
::cvflann::Index<Distance>* nnIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @cond IGNORED
|
||||||
|
|
||||||
#define FLANN_DISTANCE_CHECK \
|
#define FLANN_DISTANCE_CHECK \
|
||||||
if ( ::cvflann::flann_distance_type() != cvflann::FLANN_DIST_L2) { \
|
if ( ::cvflann::flann_distance_type() != cvflann::FLANN_DIST_L2) { \
|
||||||
@ -218,6 +332,8 @@ int GenericIndex<Distance>::radiusSearch(const Mat& query, Mat& indices, Mat& di
|
|||||||
return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);
|
return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use GenericIndex class instead
|
* @deprecated Use GenericIndex class instead
|
||||||
*/
|
*/
|
||||||
@ -283,6 +399,8 @@ template <typename T>
|
|||||||
class FLANN_DEPRECATED Index_;
|
class FLANN_DEPRECATED Index_;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//! @cond IGNORED
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
Index_<T>::Index_(const Mat& dataset, const ::cvflann::IndexParams& params)
|
Index_<T>::Index_(const Mat& dataset, const ::cvflann::IndexParams& params)
|
||||||
{
|
{
|
||||||
@ -377,7 +495,25 @@ int Index_<T>::radiusSearch(const Mat& query, Mat& indices, Mat& dists, Distance
|
|||||||
if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);
|
if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
|
/** @brief Clusters features using hierarchical k-means algorithm.
|
||||||
|
|
||||||
|
@param features The points to be clustered. The matrix must have elements of type
|
||||||
|
Distance::ElementType.
|
||||||
|
@param centers The centers of the clusters obtained. The matrix must have type
|
||||||
|
Distance::ResultType. The number of rows in this matrix represents the number of clusters desired,
|
||||||
|
however, because of the way the cut in the hierarchical tree is chosen, the number of clusters
|
||||||
|
computed will be the highest number of the form (branching-1)\*k+1 that's lower than the number of
|
||||||
|
clusters desired, where branching is the tree's branching factor (see description of the
|
||||||
|
KMeansIndexParams).
|
||||||
|
@param params Parameters used in the construction of the hierarchical k-means tree.
|
||||||
|
@param d Distance to be used for clustering.
|
||||||
|
|
||||||
|
The method clusters the given feature vectors by constructing a hierarchical k-means tree and
|
||||||
|
choosing a cut in the tree that minimizes the cluster's variance. It returns the number of clusters
|
||||||
|
found.
|
||||||
|
*/
|
||||||
template <typename Distance>
|
template <typename Distance>
|
||||||
int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params,
|
int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params,
|
||||||
Distance d = Distance())
|
Distance d = Distance())
|
||||||
@ -396,7 +532,8 @@ int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::K
|
|||||||
return ::cvflann::hierarchicalClustering<Distance>(m_features, m_centers, params, d);
|
return ::cvflann::hierarchicalClustering<Distance>(m_features, m_centers, params, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated
|
||||||
|
*/
|
||||||
template <typename ELEM_TYPE, typename DIST_TYPE>
|
template <typename ELEM_TYPE, typename DIST_TYPE>
|
||||||
FLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params)
|
FLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params)
|
||||||
{
|
{
|
||||||
@ -417,6 +554,8 @@ FLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! @} flann
|
||||||
|
|
||||||
} } // namespace cv::flann
|
} } // namespace cv::flann
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,11 +47,92 @@
|
|||||||
#include "opencv2/imgcodecs.hpp"
|
#include "opencv2/imgcodecs.hpp"
|
||||||
#include "opencv2/videoio.hpp"
|
#include "opencv2/videoio.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@defgroup highgui High-level GUI
|
||||||
|
|
||||||
|
While OpenCV was designed for use in full-scale applications and can be used within functionally
|
||||||
|
rich UI frameworks (such as Qt\*, WinForms\*, or Cocoa\*) or without any UI at all, sometimes there
|
||||||
|
it is required to try functionality quickly and visualize the results. This is what the HighGUI
|
||||||
|
module has been designed for.
|
||||||
|
|
||||||
|
It provides easy interface to:
|
||||||
|
|
||||||
|
- Create and manipulate windows that can display images and "remember" their content (no need to
|
||||||
|
handle repaint events from OS).
|
||||||
|
- Add trackbars to the windows, handle simple mouse events as well as keyboard commands.
|
||||||
|
|
||||||
|
@{
|
||||||
|
@defgroup highgui_opengl OpenGL support
|
||||||
|
@defgroup highgui_qt Qt New Functions
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This figure explains new functionality implemented with Qt\* GUI. The new GUI provides a statusbar,
|
||||||
|
a toolbar, and a control panel. The control panel can have trackbars and buttonbars attached to it.
|
||||||
|
If you cannot see the control panel, press Ctrl+P or right-click any Qt window and select **Display
|
||||||
|
properties window**.
|
||||||
|
|
||||||
|
- To attach a trackbar, the window name parameter must be NULL.
|
||||||
|
|
||||||
|
- To attach a buttonbar, a button must be created. If the last bar attached to the control panel
|
||||||
|
is a buttonbar, the new button is added to the right of the last button. If the last bar
|
||||||
|
attached to the control panel is a trackbar, or the control panel is empty, a new buttonbar is
|
||||||
|
created. Then, a new button is attached to it.
|
||||||
|
|
||||||
|
See below the example used to generate the figure: :
|
||||||
|
@code
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
int value = 50;
|
||||||
|
int value2 = 0;
|
||||||
|
|
||||||
|
cvNamedWindow("main1",CV_WINDOW_NORMAL);
|
||||||
|
cvNamedWindow("main2",CV_WINDOW_AUTOSIZE | CV_GUI_NORMAL);
|
||||||
|
|
||||||
|
cvCreateTrackbar( "track1", "main1", &value, 255, NULL);//OK tested
|
||||||
|
char* nameb1 = "button1";
|
||||||
|
char* nameb2 = "button2";
|
||||||
|
cvCreateButton(nameb1,callbackButton,nameb1,CV_CHECKBOX,1);
|
||||||
|
|
||||||
|
cvCreateButton(nameb2,callbackButton,nameb2,CV_CHECKBOX,0);
|
||||||
|
cvCreateTrackbar( "track2", NULL, &value2, 255, NULL);
|
||||||
|
cvCreateButton("button5",callbackButton1,NULL,CV_RADIOBOX,0);
|
||||||
|
cvCreateButton("button6",callbackButton2,NULL,CV_RADIOBOX,1);
|
||||||
|
|
||||||
|
cvSetMouseCallback( "main2",on_mouse,NULL );
|
||||||
|
|
||||||
|
IplImage* img1 = cvLoadImage("files/flower.jpg");
|
||||||
|
IplImage* img2 = cvCreateImage(cvGetSize(img1),8,3);
|
||||||
|
CvCapture* video = cvCaptureFromFile("files/hockey.avi");
|
||||||
|
IplImage* img3 = cvCreateImage(cvGetSize(cvQueryFrame(video)),8,3);
|
||||||
|
|
||||||
|
while(cvWaitKey(33) != 27)
|
||||||
|
{
|
||||||
|
cvAddS(img1,cvScalarAll(value),img2);
|
||||||
|
cvAddS(cvQueryFrame(video),cvScalarAll(value2),img3);
|
||||||
|
cvShowImage("main1",img2);
|
||||||
|
cvShowImage("main2",img3);
|
||||||
|
}
|
||||||
|
|
||||||
|
cvDestroyAllWindows();
|
||||||
|
cvReleaseImage(&img1);
|
||||||
|
cvReleaseImage(&img2);
|
||||||
|
cvReleaseImage(&img3);
|
||||||
|
cvReleaseCapture(&video);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@endcode
|
||||||
|
|
||||||
|
@defgroup highgui_c C API
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
///////////////////////// graphical user interface //////////////////////////
|
///////////////////////// graphical user interface //////////////////////////
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//! @addtogroup highgui
|
||||||
|
//! @{
|
||||||
|
|
||||||
// Flags for namedWindow
|
// Flags for namedWindow
|
||||||
enum { WINDOW_NORMAL = 0x00000000, // the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size
|
enum { WINDOW_NORMAL = 0x00000000, // the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size
|
||||||
WINDOW_AUTOSIZE = 0x00000001, // the user cannot resize the window, the size is constrainted by the image displayed
|
WINDOW_AUTOSIZE = 0x00000001, // the user cannot resize the window, the size is constrainted by the image displayed
|
||||||
@ -117,54 +198,334 @@ typedef void (*TrackbarCallback)(int pos, void* userdata);
|
|||||||
typedef void (*OpenGlDrawCallback)(void* userdata);
|
typedef void (*OpenGlDrawCallback)(void* userdata);
|
||||||
typedef void (*ButtonCallback)(int state, void* userdata);
|
typedef void (*ButtonCallback)(int state, void* userdata);
|
||||||
|
|
||||||
|
/** @brief Creates a window.
|
||||||
|
|
||||||
|
@param winname Name of the window in the window caption that may be used as a window identifier.
|
||||||
|
@param flags Flags of the window. The supported flags are:
|
||||||
|
> - **WINDOW_NORMAL** If this is set, the user can resize the window (no constraint).
|
||||||
|
> - **WINDOW_AUTOSIZE** If this is set, the window size is automatically adjusted to fit the
|
||||||
|
> displayed image (see imshow ), and you cannot change the window size manually.
|
||||||
|
> - **WINDOW_OPENGL** If this is set, the window will be created with OpenGL support.
|
||||||
|
|
||||||
|
The function namedWindow creates a window that can be used as a placeholder for images and
|
||||||
|
trackbars. Created windows are referred to by their names.
|
||||||
|
|
||||||
|
If a window with the same name already exists, the function does nothing.
|
||||||
|
|
||||||
|
You can call destroyWindow or destroyAllWindows to close the window and de-allocate any associated
|
||||||
|
memory usage. For a simple program, you do not really have to call these functions because all the
|
||||||
|
resources and windows of the application are closed automatically by the operating system upon exit.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
Qt backend supports additional flags:
|
||||||
|
- **CV_WINDOW_NORMAL or CV_WINDOW_AUTOSIZE:** CV_WINDOW_NORMAL enables you to resize the
|
||||||
|
window, whereas CV_WINDOW_AUTOSIZE adjusts automatically the window size to fit the
|
||||||
|
displayed image (see imshow ), and you cannot change the window size manually.
|
||||||
|
- **CV_WINDOW_FREERATIO or CV_WINDOW_KEEPRATIO:** CV_WINDOW_FREERATIO adjusts the image
|
||||||
|
with no respect to its ratio, whereas CV_WINDOW_KEEPRATIO keeps the image ratio.
|
||||||
|
- **CV_GUI_NORMAL or CV_GUI_EXPANDED:** CV_GUI_NORMAL is the old way to draw the window
|
||||||
|
without statusbar and toolbar, whereas CV_GUI_EXPANDED is a new enhanced GUI.
|
||||||
|
By default, flags == CV_WINDOW_AUTOSIZE | CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
|
CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
|
||||||
|
|
||||||
|
/** @brief Destroys a window.
|
||||||
|
|
||||||
|
@param winname Name of the window to be destroyed.
|
||||||
|
|
||||||
|
The function destroyWindow destroys the window with the given name.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void destroyWindow(const String& winname);
|
CV_EXPORTS_W void destroyWindow(const String& winname);
|
||||||
|
|
||||||
|
/** @brief Destroys all of the HighGUI windows.
|
||||||
|
|
||||||
|
The function destroyAllWindows destroys all of the opened HighGUI windows.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void destroyAllWindows();
|
CV_EXPORTS_W void destroyAllWindows();
|
||||||
|
|
||||||
CV_EXPORTS_W int startWindowThread();
|
CV_EXPORTS_W int startWindowThread();
|
||||||
|
|
||||||
|
/** @brief Waits for a pressed key.
|
||||||
|
|
||||||
|
@param delay Delay in milliseconds. 0 is the special value that means "forever".
|
||||||
|
|
||||||
|
The function waitKey waits for a key event infinitely (when \f$\texttt{delay}\leq 0\f$ ) or for delay
|
||||||
|
milliseconds, when it is positive. Since the OS has a minimum time between switching threads, the
|
||||||
|
function will not wait exactly delay ms, it will wait at least delay ms, depending on what else is
|
||||||
|
running on your computer at that time. It returns the code of the pressed key or -1 if no key was
|
||||||
|
pressed before the specified time had elapsed.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
This function is the only method in HighGUI that can fetch and handle events, so it needs to be
|
||||||
|
called periodically for normal event processing unless HighGUI is used within an environment that
|
||||||
|
takes care of event processing.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
The function only works if there is at least one HighGUI window created and the window is active.
|
||||||
|
If there are several HighGUI windows, any of them can be active.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W int waitKey(int delay = 0);
|
CV_EXPORTS_W int waitKey(int delay = 0);
|
||||||
|
|
||||||
|
/** @brief Displays an image in the specified window.
|
||||||
|
|
||||||
|
@param winname Name of the window.
|
||||||
|
@param mat Image to be shown.
|
||||||
|
|
||||||
|
The function imshow displays an image in the specified window. If the window was created with the
|
||||||
|
CV_WINDOW_AUTOSIZE flag, the image is shown with its original size. Otherwise, the image is scaled
|
||||||
|
to fit the window. The function may scale the image, depending on its depth:
|
||||||
|
|
||||||
|
- If the image is 8-bit unsigned, it is displayed as is.
|
||||||
|
- If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the
|
||||||
|
value range [0,255\*256] is mapped to [0,255].
|
||||||
|
- If the image is 32-bit floating-point, the pixel values are multiplied by 255. That is, the
|
||||||
|
value range [0,1] is mapped to [0,255].
|
||||||
|
|
||||||
|
If window was created with OpenGL support, imshow also support ogl::Buffer , ogl::Texture2D and
|
||||||
|
cuda::GpuMat as input.
|
||||||
|
|
||||||
|
@note This function should be followed by waitKey function which displays the image for specified
|
||||||
|
milliseconds. Otherwise, it won't display the image. For example, waitKey(0) will display the window
|
||||||
|
infinitely until any keypress (it is suitable for image display). waitKey(25) will display a frame
|
||||||
|
for 25 ms, after which display will be automatically closed. (If you put it in a loop to read
|
||||||
|
videos, it will display the video frame-by-frame)
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
[Windows Backend Only] Pressing Ctrl+C will copy the image to the clipboard.
|
||||||
|
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
|
CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
|
||||||
|
|
||||||
|
/** @brief Resizes window to the specified size
|
||||||
|
|
||||||
|
@param winname Window name
|
||||||
|
@param width The new window width
|
||||||
|
@param height The new window height
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
- The specified window size is for the image area. Toolbars are not counted.
|
||||||
|
- Only windows created without CV_WINDOW_AUTOSIZE flag can be resized.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void resizeWindow(const String& winname, int width, int height);
|
CV_EXPORTS_W void resizeWindow(const String& winname, int width, int height);
|
||||||
|
|
||||||
|
/** @brief Moves window to the specified position
|
||||||
|
|
||||||
|
@param winname Window name
|
||||||
|
@param x The new x-coordinate of the window
|
||||||
|
@param y The new y-coordinate of the window
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void moveWindow(const String& winname, int x, int y);
|
CV_EXPORTS_W void moveWindow(const String& winname, int x, int y);
|
||||||
|
|
||||||
|
/** @brief Changes parameters of a window dynamically.
|
||||||
|
|
||||||
|
@param winname Name of the window.
|
||||||
|
@param prop_id Window property to edit. The following operation flags are available:
|
||||||
|
- **CV_WND_PROP_FULLSCREEN** Change if the window is fullscreen ( CV_WINDOW_NORMAL or
|
||||||
|
CV_WINDOW_FULLSCREEN ).
|
||||||
|
- **CV_WND_PROP_AUTOSIZE** Change if the window is resizable (CV_WINDOW_NORMAL or
|
||||||
|
CV_WINDOW_AUTOSIZE ).
|
||||||
|
- **CV_WND_PROP_ASPECTRATIO** Change if the aspect ratio of the image is preserved (
|
||||||
|
CV_WINDOW_FREERATIO or CV_WINDOW_KEEPRATIO ).
|
||||||
|
@param prop_value New value of the window property. The following operation flags are available:
|
||||||
|
- **CV_WINDOW_NORMAL** Change the window to normal size or make the window resizable.
|
||||||
|
- **CV_WINDOW_AUTOSIZE** Constrain the size by the displayed image. The window is not
|
||||||
|
resizable.
|
||||||
|
- **CV_WINDOW_FULLSCREEN** Change the window to fullscreen.
|
||||||
|
- **CV_WINDOW_FREERATIO** Make the window resizable without any ratio constraints.
|
||||||
|
- **CV_WINDOW_KEEPRATIO** Make the window resizable, but preserve the proportions of the
|
||||||
|
displayed image.
|
||||||
|
|
||||||
|
The function setWindowProperty enables changing properties of a window.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void setWindowProperty(const String& winname, int prop_id, double prop_value);
|
CV_EXPORTS_W void setWindowProperty(const String& winname, int prop_id, double prop_value);
|
||||||
|
|
||||||
|
/** @brief Updates window title
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void setWindowTitle(const String& winname, const String& title);
|
CV_EXPORTS_W void setWindowTitle(const String& winname, const String& title);
|
||||||
|
|
||||||
|
/** @brief Provides parameters of a window.
|
||||||
|
|
||||||
|
@param winname Name of the window.
|
||||||
|
@param prop_id Window property to retrieve. The following operation flags are available:
|
||||||
|
- **CV_WND_PROP_FULLSCREEN** Change if the window is fullscreen ( CV_WINDOW_NORMAL or
|
||||||
|
CV_WINDOW_FULLSCREEN ).
|
||||||
|
- **CV_WND_PROP_AUTOSIZE** Change if the window is resizable (CV_WINDOW_NORMAL or
|
||||||
|
CV_WINDOW_AUTOSIZE ).
|
||||||
|
- **CV_WND_PROP_ASPECTRATIO** Change if the aspect ratio of the image is preserved
|
||||||
|
(CV_WINDOW_FREERATIO or CV_WINDOW_KEEPRATIO ).
|
||||||
|
|
||||||
|
See setWindowProperty to know the meaning of the returned values.
|
||||||
|
|
||||||
|
The function getWindowProperty returns properties of a window.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W double getWindowProperty(const String& winname, int prop_id);
|
CV_EXPORTS_W double getWindowProperty(const String& winname, int prop_id);
|
||||||
|
|
||||||
//! assigns callback for mouse events
|
/** @brief Sets mouse handler for the specified window
|
||||||
|
|
||||||
|
@param winname Window name
|
||||||
|
@param onMouse Mouse callback. See OpenCV samples, such as
|
||||||
|
<https://github.com/Itseez/opencv/tree/master/samples/cpp/ffilldemo.cpp>, on how to specify and
|
||||||
|
use the callback.
|
||||||
|
@param userdata The optional parameter passed to the callback.
|
||||||
|
*/
|
||||||
CV_EXPORTS void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);
|
CV_EXPORTS void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);
|
||||||
|
|
||||||
|
/** @brief Gets the mouse-wheel motion delta, when handling mouse-wheel events EVENT_MOUSEWHEEL and
|
||||||
|
EVENT_MOUSEHWHEEL.
|
||||||
|
|
||||||
|
@param flags The mouse callback flags parameter.
|
||||||
|
|
||||||
|
For regular mice with a scroll-wheel, delta will be a multiple of 120. The value 120 corresponds to
|
||||||
|
a one notch rotation of the wheel or the threshold for action to be taken and one such action should
|
||||||
|
occur for each delta. Some high-precision mice with higher-resolution freely-rotating wheels may
|
||||||
|
generate smaller values.
|
||||||
|
|
||||||
|
For EVENT_MOUSEWHEEL positive and negative values mean forward and backward scrolling,
|
||||||
|
respectively. For EVENT_MOUSEHWHEEL, where available, positive and negative values mean right and
|
||||||
|
left scrolling, respectively.
|
||||||
|
|
||||||
|
With the C API, the macro CV_GET_WHEEL_DELTA(flags) can be used alternatively.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
Mouse-wheel events are currently supported only on Windows.
|
||||||
|
*/
|
||||||
CV_EXPORTS int getMouseWheelDelta(int flags);
|
CV_EXPORTS int getMouseWheelDelta(int flags);
|
||||||
|
|
||||||
|
/** @brief Creates a trackbar and attaches it to the specified window.
|
||||||
|
|
||||||
|
@param trackbarname Name of the created trackbar.
|
||||||
|
@param winname Name of the window that will be used as a parent of the created trackbar.
|
||||||
|
@param value Optional pointer to an integer variable whose value reflects the position of the
|
||||||
|
slider. Upon creation, the slider position is defined by this variable.
|
||||||
|
@param count Maximal position of the slider. The minimal position is always 0.
|
||||||
|
@param onChange Pointer to the function to be called every time the slider changes position. This
|
||||||
|
function should be prototyped as void Foo(int,void\*); , where the first parameter is the trackbar
|
||||||
|
position and the second parameter is the user data (see the next parameter). If the callback is
|
||||||
|
the NULL pointer, no callbacks are called, but only value is updated.
|
||||||
|
@param userdata User data that is passed as is to the callback. It can be used to handle trackbar
|
||||||
|
events without using global variables.
|
||||||
|
|
||||||
|
The function createTrackbar creates a trackbar (a slider or range control) with the specified name
|
||||||
|
and range, assigns a variable value to be a position synchronized with the trackbar and specifies
|
||||||
|
the callback function onChange to be called on the trackbar position change. The created trackbar is
|
||||||
|
displayed in the specified window winname.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
**[Qt Backend Only]** winname can be empty (or NULL) if the trackbar should be attached to the
|
||||||
|
control panel.
|
||||||
|
|
||||||
|
Clicking the label of each trackbar enables editing the trackbar values manually.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
- An example of using the trackbar functionality can be found at
|
||||||
|
opencv_source_code/samples/cpp/connected_components.cpp
|
||||||
|
*/
|
||||||
CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,
|
CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,
|
||||||
int* value, int count,
|
int* value, int count,
|
||||||
TrackbarCallback onChange = 0,
|
TrackbarCallback onChange = 0,
|
||||||
void* userdata = 0);
|
void* userdata = 0);
|
||||||
|
|
||||||
|
/** @brief Returns the trackbar position.
|
||||||
|
|
||||||
|
@param trackbarname Name of the trackbar.
|
||||||
|
@param winname Name of the window that is the parent of the trackbar.
|
||||||
|
|
||||||
|
The function returns the current position of the specified trackbar.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
**[Qt Backend Only]** winname can be empty (or NULL) if the trackbar is attached to the control
|
||||||
|
panel.
|
||||||
|
|
||||||
|
*/
|
||||||
CV_EXPORTS_W int getTrackbarPos(const String& trackbarname, const String& winname);
|
CV_EXPORTS_W int getTrackbarPos(const String& trackbarname, const String& winname);
|
||||||
|
|
||||||
|
/** @brief Sets the trackbar position.
|
||||||
|
|
||||||
|
@param trackbarname Name of the trackbar.
|
||||||
|
@param winname Name of the window that is the parent of trackbar.
|
||||||
|
@param pos New position.
|
||||||
|
|
||||||
|
The function sets the position of the specified trackbar in the specified window.
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
**[Qt Backend Only]** winname can be empty (or NULL) if the trackbar is attached to the control
|
||||||
|
panel.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W void setTrackbarPos(const String& trackbarname, const String& winname, int pos);
|
CV_EXPORTS_W void setTrackbarPos(const String& trackbarname, const String& winname, int pos);
|
||||||
|
|
||||||
|
//! @addtogroup highgui_opengl OpenGL support
|
||||||
|
//! @{
|
||||||
|
|
||||||
// OpenGL support
|
|
||||||
CV_EXPORTS void imshow(const String& winname, const ogl::Texture2D& tex);
|
CV_EXPORTS void imshow(const String& winname, const ogl::Texture2D& tex);
|
||||||
|
|
||||||
|
/** @brief Sets a callback function to be called to draw on top of displayed image.
|
||||||
|
|
||||||
|
@param winname Name of the window.
|
||||||
|
@param onOpenGlDraw Pointer to the function to be called every frame. This function should be
|
||||||
|
prototyped as void Foo(void\*) .
|
||||||
|
@param userdata Pointer passed to the callback function. *(Optional)*
|
||||||
|
|
||||||
|
The function setOpenGlDrawCallback can be used to draw 3D data on the window. See the example of
|
||||||
|
callback function below: :
|
||||||
|
@code
|
||||||
|
void on_opengl(void* param)
|
||||||
|
{
|
||||||
|
glLoadIdentity();
|
||||||
|
|
||||||
|
glTranslated(0.0, 0.0, -1.0);
|
||||||
|
|
||||||
|
glRotatef( 55, 1, 0, 0 );
|
||||||
|
glRotatef( 45, 0, 1, 0 );
|
||||||
|
glRotatef( 0, 0, 0, 1 );
|
||||||
|
|
||||||
|
static const int coords[6][4][3] = {
|
||||||
|
{ { +1, -1, -1 }, { -1, -1, -1 }, { -1, +1, -1 }, { +1, +1, -1 } },
|
||||||
|
{ { +1, +1, -1 }, { -1, +1, -1 }, { -1, +1, +1 }, { +1, +1, +1 } },
|
||||||
|
{ { +1, -1, +1 }, { +1, -1, -1 }, { +1, +1, -1 }, { +1, +1, +1 } },
|
||||||
|
{ { -1, -1, -1 }, { -1, -1, +1 }, { -1, +1, +1 }, { -1, +1, -1 } },
|
||||||
|
{ { +1, -1, +1 }, { -1, -1, +1 }, { -1, -1, -1 }, { +1, -1, -1 } },
|
||||||
|
{ { -1, -1, +1 }, { +1, -1, +1 }, { +1, +1, +1 }, { -1, +1, +1 } }
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; ++i) {
|
||||||
|
glColor3ub( i*20, 100+i*10, i*42 );
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
for (int j = 0; j < 4; ++j) {
|
||||||
|
glVertex3d(0.2 * coords[i][j][0], 0.2 * coords[i][j][1], 0.2 * coords[i][j][2]);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@endcode
|
||||||
|
*/
|
||||||
CV_EXPORTS void setOpenGlDrawCallback(const String& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);
|
CV_EXPORTS void setOpenGlDrawCallback(const String& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);
|
||||||
|
|
||||||
|
/** @brief Sets the specified window as current OpenGL context.
|
||||||
|
|
||||||
|
@param winname Window name
|
||||||
|
*/
|
||||||
CV_EXPORTS void setOpenGlContext(const String& winname);
|
CV_EXPORTS void setOpenGlContext(const String& winname);
|
||||||
|
|
||||||
|
/** @brief Force window to redraw its context and call draw callback ( setOpenGlDrawCallback ).
|
||||||
|
|
||||||
|
@param winname Window name
|
||||||
|
*/
|
||||||
CV_EXPORTS void updateWindow(const String& winname);
|
CV_EXPORTS void updateWindow(const String& winname);
|
||||||
|
|
||||||
|
//! @} highgui_opengl
|
||||||
|
|
||||||
|
//! @addtogroup highgui_qt
|
||||||
|
//! @{
|
||||||
// Only for Qt
|
// Only for Qt
|
||||||
|
|
||||||
struct QtFont
|
struct QtFont
|
||||||
@ -182,27 +543,138 @@ struct QtFont
|
|||||||
int line_type; // Qt: PointSize
|
int line_type; // Qt: PointSize
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Creates the font to draw a text on an image.
|
||||||
|
|
||||||
|
@param nameFont Name of the font. The name should match the name of a system font (such as
|
||||||
|
*Times*). If the font is not found, a default one is used.
|
||||||
|
@param pointSize Size of the font. If not specified, equal zero or negative, the point size of the
|
||||||
|
font is set to a system-dependent default value. Generally, this is 12 points.
|
||||||
|
@param color Color of the font in BGRA where A = 255 is fully transparent. Use the macro CV _ RGB
|
||||||
|
for simplicity.
|
||||||
|
@param weight Font weight. The following operation flags are available:
|
||||||
|
- **CV_FONT_LIGHT** Weight of 25
|
||||||
|
- **CV_FONT_NORMAL** Weight of 50
|
||||||
|
- **CV_FONT_DEMIBOLD** Weight of 63
|
||||||
|
- **CV_FONT_BOLD** Weight of 75
|
||||||
|
- **CV_FONT_BLACK** Weight of 87
|
||||||
|
|
||||||
|
You can also specify a positive integer for better control.
|
||||||
|
@param style Font style. The following operation flags are available:
|
||||||
|
- **CV_STYLE_NORMAL** Normal font
|
||||||
|
- **CV_STYLE_ITALIC** Italic font
|
||||||
|
- **CV_STYLE_OBLIQUE** Oblique font
|
||||||
|
@param spacing Spacing between characters. It can be negative or positive.
|
||||||
|
|
||||||
|
The function fontQt creates a CvFont object. This CvFont is not compatible with putText .
|
||||||
|
|
||||||
|
A basic usage of this function is the following: :
|
||||||
|
@code
|
||||||
|
CvFont font = fontQt(''Times'');
|
||||||
|
addText( img1, ``Hello World !'', Point(50,50), font);
|
||||||
|
@endcode
|
||||||
|
*/
|
||||||
CV_EXPORTS QtFont fontQt(const String& nameFont, int pointSize = -1,
|
CV_EXPORTS QtFont fontQt(const String& nameFont, int pointSize = -1,
|
||||||
Scalar color = Scalar::all(0), int weight = QT_FONT_NORMAL,
|
Scalar color = Scalar::all(0), int weight = QT_FONT_NORMAL,
|
||||||
int style = QT_STYLE_NORMAL, int spacing = 0);
|
int style = QT_STYLE_NORMAL, int spacing = 0);
|
||||||
|
|
||||||
|
/** @brief Creates the font to draw a text on an image.
|
||||||
|
|
||||||
|
@param img 8-bit 3-channel image where the text should be drawn.
|
||||||
|
@param text Text to write on an image.
|
||||||
|
@param org Point(x,y) where the text should start on an image.
|
||||||
|
@param font Font to use to draw a text.
|
||||||
|
|
||||||
|
The function addText draws *text* on an image *img* using a specific font *font* (see example fontQt
|
||||||
|
)
|
||||||
|
*/
|
||||||
CV_EXPORTS void addText( const Mat& img, const String& text, Point org, const QtFont& font);
|
CV_EXPORTS void addText( const Mat& img, const String& text, Point org, const QtFont& font);
|
||||||
|
|
||||||
|
/** @brief Displays a text on a window image as an overlay for a specified duration.
|
||||||
|
|
||||||
|
@param winname Name of the window.
|
||||||
|
@param text Overlay text to write on a window image.
|
||||||
|
@param delayms The period (in milliseconds), during which the overlay text is displayed. If this
|
||||||
|
function is called before the previous overlay text timed out, the timer is restarted and the text
|
||||||
|
is updated. If this value is zero, the text never disappears.
|
||||||
|
|
||||||
|
The function displayOverlay displays useful information/tips on top of the window for a certain
|
||||||
|
amount of time *delayms*. The function does not modify the image, displayed in the window, that is,
|
||||||
|
after the specified delay the original content of the window is restored.
|
||||||
|
*/
|
||||||
CV_EXPORTS void displayOverlay(const String& winname, const String& text, int delayms = 0);
|
CV_EXPORTS void displayOverlay(const String& winname, const String& text, int delayms = 0);
|
||||||
|
|
||||||
|
/** @brief Displays a text on the window statusbar during the specified period of time.
|
||||||
|
|
||||||
|
@param winname Name of the window.
|
||||||
|
@param text Text to write on the window statusbar.
|
||||||
|
@param delayms Duration (in milliseconds) to display the text. If this function is called before
|
||||||
|
the previous text timed out, the timer is restarted and the text is updated. If this value is
|
||||||
|
zero, the text never disappears.
|
||||||
|
|
||||||
|
The function displayOverlay displays useful information/tips on top of the window for a certain
|
||||||
|
amount of time *delayms* . This information is displayed on the window statusbar (the window must be
|
||||||
|
created with the CV_GUI_EXPANDED flags).
|
||||||
|
*/
|
||||||
CV_EXPORTS void displayStatusBar(const String& winname, const String& text, int delayms = 0);
|
CV_EXPORTS void displayStatusBar(const String& winname, const String& text, int delayms = 0);
|
||||||
|
|
||||||
|
/** @brief Saves parameters of the specified window.
|
||||||
|
|
||||||
|
@param windowName Name of the window.
|
||||||
|
|
||||||
|
The function saveWindowParameters saves size, location, flags, trackbars value, zoom and panning
|
||||||
|
location of the window window_name .
|
||||||
|
*/
|
||||||
CV_EXPORTS void saveWindowParameters(const String& windowName);
|
CV_EXPORTS void saveWindowParameters(const String& windowName);
|
||||||
|
|
||||||
|
/** @brief Loads parameters of the specified window.
|
||||||
|
|
||||||
|
@param windowName Name of the window.
|
||||||
|
|
||||||
|
The function loadWindowParameters loads size, location, flags, trackbars value, zoom and panning
|
||||||
|
location of the window window_name .
|
||||||
|
*/
|
||||||
CV_EXPORTS void loadWindowParameters(const String& windowName);
|
CV_EXPORTS void loadWindowParameters(const String& windowName);
|
||||||
|
|
||||||
CV_EXPORTS int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);
|
CV_EXPORTS int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]);
|
||||||
|
|
||||||
CV_EXPORTS void stopLoop();
|
CV_EXPORTS void stopLoop();
|
||||||
|
|
||||||
|
/** @brief Attaches a button to the control panel.
|
||||||
|
|
||||||
|
@param bar_name
|
||||||
|
Name of the button.
|
||||||
|
@param on_change Pointer to the function to be called every time the button changes its state.
|
||||||
|
This function should be prototyped as void Foo(int state,\*void); . *state* is the current state
|
||||||
|
of the button. It could be -1 for a push button, 0 or 1 for a check/radio box button.
|
||||||
|
@param userdata Pointer passed to the callback function.
|
||||||
|
@param type Optional type of the button.
|
||||||
|
- **CV_PUSH_BUTTON** Push button
|
||||||
|
- **CV_CHECKBOX** Checkbox button
|
||||||
|
- **CV_RADIOBOX** Radiobox button. The radiobox on the same buttonbar (same line) are
|
||||||
|
exclusive, that is only one can be selected at a time.
|
||||||
|
@param initial_button_state Default state of the button. Use for checkbox and radiobox. Its
|
||||||
|
value could be 0 or 1. *(Optional)*
|
||||||
|
|
||||||
|
The function createButton attaches a button to the control panel. Each button is added to a
|
||||||
|
buttonbar to the right of the last button. A new buttonbar is created if nothing was attached to the
|
||||||
|
control panel before, or if the last element attached to the control panel was a trackbar.
|
||||||
|
|
||||||
|
See below various examples of the createButton function call: :
|
||||||
|
@code
|
||||||
|
createButton(NULL,callbackButton);//create a push button "button 0", that will call callbackButton.
|
||||||
|
createButton("button2",callbackButton,NULL,CV_CHECKBOX,0);
|
||||||
|
createButton("button3",callbackButton,&value);
|
||||||
|
createButton("button5",callbackButton1,NULL,CV_RADIOBOX);
|
||||||
|
createButton("button6",callbackButton2,NULL,CV_PUSH_BUTTON,1);
|
||||||
|
@endcode
|
||||||
|
*/
|
||||||
CV_EXPORTS int createButton( const String& bar_name, ButtonCallback on_change,
|
CV_EXPORTS int createButton( const String& bar_name, ButtonCallback on_change,
|
||||||
void* userdata = 0, int type = QT_PUSH_BUTTON,
|
void* userdata = 0, int type = QT_PUSH_BUTTON,
|
||||||
bool initial_button_state = false);
|
bool initial_button_state = false);
|
||||||
|
|
||||||
|
//! @} highgui_qt
|
||||||
|
|
||||||
|
//! @} highgui
|
||||||
|
|
||||||
} // cv
|
} // cv
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,6 +51,10 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/** @addtogroup highgui_c
|
||||||
|
@{
|
||||||
|
*/
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
* Basic GUI functions *
|
* Basic GUI functions *
|
||||||
\****************************************************************************************/
|
\****************************************************************************************/
|
||||||
@ -237,6 +241,8 @@ CVAPI(void) cvSetPostprocessFuncWin32_(const void* callback);
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** @} highgui_c */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -45,10 +45,21 @@
|
|||||||
|
|
||||||
#include "opencv2/core.hpp"
|
#include "opencv2/core.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@defgroup imgcodecs Image file reading and writing
|
||||||
|
@{
|
||||||
|
@defgroup imgcodecs_c C API
|
||||||
|
@defgroup imgcodecs_ios iOS glue
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
//////////////////////////////// image codec ////////////////////////////////
|
//////////////////////////////// image codec ////////////////////////////////
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//! @addtogroup imgcodecs
|
||||||
|
//! @{
|
||||||
|
|
||||||
enum { IMREAD_UNCHANGED = -1, // 8bit, color or not
|
enum { IMREAD_UNCHANGED = -1, // 8bit, color or not
|
||||||
IMREAD_GRAYSCALE = 0, // 8bit, gray
|
IMREAD_GRAYSCALE = 0, // 8bit, gray
|
||||||
IMREAD_COLOR = 1, // ?, color
|
IMREAD_COLOR = 1, // ?, color
|
||||||
@ -77,19 +88,166 @@ enum { IMWRITE_PNG_STRATEGY_DEFAULT = 0,
|
|||||||
IMWRITE_PNG_STRATEGY_FIXED = 4
|
IMWRITE_PNG_STRATEGY_FIXED = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Loads an image from a file.
|
||||||
|
|
||||||
|
@param filename Name of file to be loaded.
|
||||||
|
@param flags Flags specifying the color type of a loaded image:
|
||||||
|
- CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the
|
||||||
|
corresponding depth, otherwise convert it to 8-bit.
|
||||||
|
- CV_LOAD_IMAGE_COLOR - If set, always convert image to the color one
|
||||||
|
- CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
|
||||||
|
- **\>0** Return a 3-channel color image.
|
||||||
|
|
||||||
|
@note In the current implementation the alpha channel, if any, is stripped from the output image.
|
||||||
|
Use negative value if you need the alpha channel.
|
||||||
|
|
||||||
|
- **=0** Return a grayscale image.
|
||||||
|
- **\<0** Return the loaded image as is (with alpha channel).
|
||||||
|
|
||||||
|
The function imread loads an image from the specified file and returns it. If the image cannot be
|
||||||
|
read (because of missing file, improper permissions, unsupported or invalid format), the function
|
||||||
|
returns an empty matrix ( Mat::data==NULL ). Currently, the following file formats are supported:
|
||||||
|
|
||||||
|
- Windows bitmaps - \*.bmp, \*.dib (always supported)
|
||||||
|
- JPEG files - \*.jpeg, \*.jpg, \*.jpe (see the *Notes* section)
|
||||||
|
- JPEG 2000 files - \*.jp2 (see the *Notes* section)
|
||||||
|
- Portable Network Graphics - \*.png (see the *Notes* section)
|
||||||
|
- WebP - \*.webp (see the *Notes* section)
|
||||||
|
- Portable image format - \*.pbm, \*.pgm, \*.ppm (always supported)
|
||||||
|
- Sun rasters - \*.sr, \*.ras (always supported)
|
||||||
|
- TIFF files - \*.tiff, \*.tif (see the *Notes* section)
|
||||||
|
|
||||||
|
@note
|
||||||
|
|
||||||
|
- The function determines the type of an image by the content, not by the file extension.
|
||||||
|
- On Microsoft Windows\* OS and MacOSX\*, the codecs shipped with an OpenCV image (libjpeg,
|
||||||
|
libpng, libtiff, and libjasper) are used by default. So, OpenCV can always read JPEGs, PNGs,
|
||||||
|
and TIFFs. On MacOSX, there is also an option to use native MacOSX image readers. But beware
|
||||||
|
that currently these native image loaders give images with different pixel values because of
|
||||||
|
the color management embedded into MacOSX.
|
||||||
|
- On Linux\*, BSD flavors and other Unix-like open-source operating systems, OpenCV looks for
|
||||||
|
codecs supplied with an OS image. Install the relevant packages (do not forget the development
|
||||||
|
files, for example, "libjpeg-dev", in Debian\* and Ubuntu\*) to get the codec support or turn
|
||||||
|
on the OPENCV_BUILD_3RDPARTY_LIBS flag in CMake.
|
||||||
|
|
||||||
|
@note In the case of color images, the decoded images will have the channels stored in B G R order.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
|
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
|
||||||
|
|
||||||
|
/** @brief Saves an image to a specified file.
|
||||||
|
|
||||||
|
@param filename Name of the file.
|
||||||
|
@param img Image to be saved.
|
||||||
|
@param params Format-specific save parameters encoded as pairs
|
||||||
|
paramId_1, paramValue_1, paramId_2, paramValue_2, ... . The following parameters are currently
|
||||||
|
supported:
|
||||||
|
- For JPEG, it can be a quality ( CV_IMWRITE_JPEG_QUALITY ) from 0 to 100 (the higher is
|
||||||
|
the better). Default value is 95.
|
||||||
|
- For WEBP, it can be a quality ( CV_IMWRITE_WEBP_QUALITY ) from 1 to 100 (the higher is
|
||||||
|
the better). By default (without any parameter) and for quality above 100 the lossless
|
||||||
|
compression is used.
|
||||||
|
- For PNG, it can be the compression level ( CV_IMWRITE_PNG_COMPRESSION ) from 0 to 9. A
|
||||||
|
higher value means a smaller size and longer compression time. Default value is 3.
|
||||||
|
- For PPM, PGM, or PBM, it can be a binary format flag ( CV_IMWRITE_PXM_BINARY ), 0 or 1.
|
||||||
|
Default value is 1.
|
||||||
|
|
||||||
|
The function imwrite saves the image to the specified file. The image format is chosen based on the
|
||||||
|
filename extension (see imread for the list of extensions). Only 8-bit (or 16-bit unsigned (CV_16U)
|
||||||
|
in case of PNG, JPEG 2000, and TIFF) single-channel or 3-channel (with 'BGR' channel order) images
|
||||||
|
can be saved using this function. If the format, depth or channel order is different, use
|
||||||
|
Mat::convertTo , and cvtColor to convert it before saving. Or, use the universal FileStorage I/O
|
||||||
|
functions to save the image to XML or YAML format.
|
||||||
|
|
||||||
|
It is possible to store PNG images with an alpha channel using this function. To do this, create
|
||||||
|
8-bit (or 16-bit) 4-channel image BGRA, where the alpha channel goes last. Fully transparent pixels
|
||||||
|
should have alpha set to 0, fully opaque pixels should have alpha set to 255/65535. The sample below
|
||||||
|
shows how to create such a BGRA image and store to PNG file. It also demonstrates how to set custom
|
||||||
|
compression parameters :
|
||||||
|
@code
|
||||||
|
#include <vector>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <opencv2/opencv.hpp>
|
||||||
|
|
||||||
|
using namespace cv;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void createAlphaMat(Mat &mat)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < mat.rows; ++i) {
|
||||||
|
for (int j = 0; j < mat.cols; ++j) {
|
||||||
|
Vec4b& rgba = mat.at<Vec4b>(i, j);
|
||||||
|
rgba[0] = UCHAR_MAX;
|
||||||
|
rgba[1] = saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX);
|
||||||
|
rgba[2] = saturate_cast<uchar>((float (mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX);
|
||||||
|
rgba[3] = saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argv, char **argc)
|
||||||
|
{
|
||||||
|
// Create mat with alpha channel
|
||||||
|
Mat mat(480, 640, CV_8UC4);
|
||||||
|
createAlphaMat(mat);
|
||||||
|
|
||||||
|
vector<int> compression_params;
|
||||||
|
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
|
||||||
|
compression_params.push_back(9);
|
||||||
|
|
||||||
|
try {
|
||||||
|
imwrite("alpha.png", mat, compression_params);
|
||||||
|
}
|
||||||
|
catch (runtime_error& ex) {
|
||||||
|
fprintf(stderr, "Exception converting image to PNG format: %s\n", ex.what());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stdout, "Saved PNG file with alpha data.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@endcode
|
||||||
|
*/
|
||||||
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
|
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
|
||||||
const std::vector<int>& params = std::vector<int>());
|
const std::vector<int>& params = std::vector<int>());
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
CV_EXPORTS_W Mat imdecode( InputArray buf, int flags );
|
CV_EXPORTS_W Mat imdecode( InputArray buf, int flags );
|
||||||
|
|
||||||
|
/** @brief Reads an image from a buffer in memory.
|
||||||
|
|
||||||
|
@param buf Input array or vector of bytes.
|
||||||
|
@param flags The same flags as in imread .
|
||||||
|
@param dst The optional output placeholder for the decoded matrix. It can save the image
|
||||||
|
reallocations when the function is called repeatedly for images of the same size.
|
||||||
|
|
||||||
|
The function reads an image from the specified buffer in the memory. If the buffer is too short or
|
||||||
|
contains invalid data, the empty matrix/image is returned.
|
||||||
|
|
||||||
|
See imread for the list of supported formats and flags description.
|
||||||
|
|
||||||
|
@note In the case of color images, the decoded images will have the channels stored in B G R order.
|
||||||
|
*/
|
||||||
CV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst);
|
CV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst);
|
||||||
|
|
||||||
|
/** @brief Encodes an image into a memory buffer.
|
||||||
|
|
||||||
|
@param ext File extension that defines the output format.
|
||||||
|
@param img Image to be written.
|
||||||
|
@param buf Output buffer resized to fit the compressed image.
|
||||||
|
@param params Format-specific parameters. See imwrite .
|
||||||
|
|
||||||
|
The function compresses the image and stores it in the memory buffer that is resized to fit the
|
||||||
|
result. See imwrite for the list of supported formats and flags description.
|
||||||
|
|
||||||
|
@note cvEncodeImage returns single-row matrix of type CV_8UC1 that contains encoded image as array
|
||||||
|
of bytes.
|
||||||
|
*/
|
||||||
CV_EXPORTS_W bool imencode( const String& ext, InputArray img,
|
CV_EXPORTS_W bool imencode( const String& ext, InputArray img,
|
||||||
CV_OUT std::vector<uchar>& buf,
|
CV_OUT std::vector<uchar>& buf,
|
||||||
const std::vector<int>& params = std::vector<int>());
|
const std::vector<int>& params = std::vector<int>());
|
||||||
|
|
||||||
|
//! @} imgcodecs
|
||||||
|
|
||||||
} // cv
|
} // cv
|
||||||
|
|
||||||
#endif //__OPENCV_IMGCODECS_HPP__
|
#endif //__OPENCV_IMGCODECS_HPP__
|
||||||
|
@ -48,6 +48,10 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/** @addtogroup imgcodecs_c
|
||||||
|
@{
|
||||||
|
*/
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
/* 8bit, color or not */
|
/* 8bit, color or not */
|
||||||
@ -124,6 +128,7 @@ CVAPI(int) cvHaveImageWriter(const char* filename);
|
|||||||
#define cvvSaveImage cvSaveImage
|
#define cvvSaveImage cvSaveImage
|
||||||
#define cvvConvertImage cvConvertImage
|
#define cvvConvertImage cvConvertImage
|
||||||
|
|
||||||
|
/** @} imgcodecs_c */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,11 @@
|
|||||||
#import <ImageIO/ImageIO.h>
|
#import <ImageIO/ImageIO.h>
|
||||||
#include "opencv2/core/core.hpp"
|
#include "opencv2/core/core.hpp"
|
||||||
|
|
||||||
|
//! @addtogroup imgcodecs_ios
|
||||||
|
//! @{
|
||||||
|
|
||||||
UIImage* MatToUIImage(const cv::Mat& image);
|
UIImage* MatToUIImage(const cv::Mat& image);
|
||||||
void UIImageToMat(const UIImage* image,
|
void UIImageToMat(const UIImage* image,
|
||||||
cv::Mat& m, bool alphaExist = false);
|
cv::Mat& m, bool alphaExist = false);
|
||||||
|
|
||||||
|
//! @}
|
||||||
|
@ -1361,7 +1361,7 @@ call
|
|||||||
|
|
||||||
is equivalent to
|
is equivalent to
|
||||||
|
|
||||||
\f[\texttt{Sobel(src, dst, ddepth, dx, dy, CV_SCHARR, scale, delta, borderType)} .\f]
|
\f[\texttt{Sobel(src, dst, ddepth, dx, dy, CV\_SCHARR, scale, delta, borderType)} .\f]
|
||||||
|
|
||||||
@param src input image.
|
@param src input image.
|
||||||
@param dst output image of the same size and the same number of channels as src.
|
@param dst output image of the same size and the same number of channels as src.
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -46,15 +46,78 @@
|
|||||||
|
|
||||||
#include "opencv2/core.hpp"
|
#include "opencv2/core.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
@defgroup objdetect Object Detection
|
||||||
|
|
||||||
|
Haar Feature-based Cascade Classifier for Object Detection
|
||||||
|
----------------------------------------------------------
|
||||||
|
|
||||||
|
The object detector described below has been initially proposed by Paul Viola @cite Viola01 and
|
||||||
|
improved by Rainer Lienhart @cite Lienhart02 .
|
||||||
|
|
||||||
|
First, a classifier (namely a *cascade of boosted classifiers working with haar-like features*) is
|
||||||
|
trained with a few hundred sample views of a particular object (i.e., a face or a car), called
|
||||||
|
positive examples, that are scaled to the same size (say, 20x20), and negative examples - arbitrary
|
||||||
|
images of the same size.
|
||||||
|
|
||||||
|
After a classifier is trained, it can be applied to a region of interest (of the same size as used
|
||||||
|
during the training) in an input image. The classifier outputs a "1" if the region is likely to show
|
||||||
|
the object (i.e., face/car), and "0" otherwise. To search for the object in the whole image one can
|
||||||
|
move the search window across the image and check every location using the classifier. The
|
||||||
|
classifier is designed so that it can be easily "resized" in order to be able to find the objects of
|
||||||
|
interest at different sizes, which is more efficient than resizing the image itself. So, to find an
|
||||||
|
object of an unknown size in the image the scan procedure should be done several times at different
|
||||||
|
scales.
|
||||||
|
|
||||||
|
The word "cascade" in the classifier name means that the resultant classifier consists of several
|
||||||
|
simpler classifiers (*stages*) that are applied subsequently to a region of interest until at some
|
||||||
|
stage the candidate is rejected or all the stages are passed. The word "boosted" means that the
|
||||||
|
classifiers at every stage of the cascade are complex themselves and they are built out of basic
|
||||||
|
classifiers using one of four different boosting techniques (weighted voting). Currently Discrete
|
||||||
|
Adaboost, Real Adaboost, Gentle Adaboost and Logitboost are supported. The basic classifiers are
|
||||||
|
decision-tree classifiers with at least 2 leaves. Haar-like features are the input to the basic
|
||||||
|
classifiers, and are calculated as described below. The current algorithm uses the following
|
||||||
|
Haar-like features:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The feature used in a particular classifier is specified by its shape (1a, 2b etc.), position within
|
||||||
|
the region of interest and the scale (this scale is not the same as the scale used at the detection
|
||||||
|
stage, though these two scales are multiplied). For example, in the case of the third line feature
|
||||||
|
(2c) the response is calculated as the difference between the sum of image pixels under the
|
||||||
|
rectangle covering the whole feature (including the two white stripes and the black stripe in the
|
||||||
|
middle) and the sum of the image pixels under the black stripe multiplied by 3 in order to
|
||||||
|
compensate for the differences in the size of areas. The sums of pixel values over a rectangular
|
||||||
|
regions are calculated rapidly using integral images (see below and the integral description).
|
||||||
|
|
||||||
|
To see the object detector at work, have a look at the facedetect demo:
|
||||||
|
<https://github.com/Itseez/opencv/tree/master/samples/cpp/dbt_face_detection.cpp>
|
||||||
|
|
||||||
|
The following reference is for the detection part only. There is a separate application called
|
||||||
|
opencv_traincascade that can train a cascade of boosted classifiers from a set of samples.
|
||||||
|
|
||||||
|
@note In the new C++ interface it is also possible to use LBP (local binary pattern) features in
|
||||||
|
addition to Haar-like features. .. [Viola01] Paul Viola and Michael J. Jones. Rapid Object Detection
|
||||||
|
using a Boosted Cascade of Simple Features. IEEE CVPR, 2001. The paper is available online at
|
||||||
|
<http://research.microsoft.com/en-us/um/people/viola/Pubs/Detect/violaJones_CVPR2001.pdf>
|
||||||
|
|
||||||
|
@{
|
||||||
|
@defgroup objdetect_c C API
|
||||||
|
@}
|
||||||
|
*/
|
||||||
|
|
||||||
typedef struct CvHaarClassifierCascade CvHaarClassifierCascade;
|
typedef struct CvHaarClassifierCascade CvHaarClassifierCascade;
|
||||||
|
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//! @addtogroup objdetect
|
||||||
|
//! @{
|
||||||
|
|
||||||
///////////////////////////// Object Detection ////////////////////////////
|
///////////////////////////// Object Detection ////////////////////////////
|
||||||
|
|
||||||
// class for grouping object candidates, detected by Cascade Classifier, HOG etc.
|
//! class for grouping object candidates, detected by Cascade Classifier, HOG etc.
|
||||||
// instance of the class is to be passed to cv::partition (see cxoperations.hpp)
|
//! instance of the class is to be passed to cv::partition (see cxoperations.hpp)
|
||||||
class CV_EXPORTS SimilarRects
|
class CV_EXPORTS SimilarRects
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -70,13 +133,32 @@ public:
|
|||||||
double eps;
|
double eps;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Groups the object candidate rectangles.
|
||||||
|
|
||||||
|
@param rectList Input/output vector of rectangles. Output vector includes retained and grouped
|
||||||
|
rectangles. (The Python list is not modified in place.)
|
||||||
|
@param groupThreshold Minimum possible number of rectangles minus 1. The threshold is used in a
|
||||||
|
group of rectangles to retain it.
|
||||||
|
@param eps Relative difference between sides of the rectangles to merge them into a group.
|
||||||
|
|
||||||
|
The function is a wrapper for the generic function partition . It clusters all the input rectangles
|
||||||
|
using the rectangle equivalence criteria that combines rectangles with similar sizes and similar
|
||||||
|
locations. The similarity is defined by eps. When eps=0 , no clustering is done at all. If
|
||||||
|
\f$\texttt{eps}\rightarrow +\inf\f$ , all the rectangles are put in one cluster. Then, the small
|
||||||
|
clusters containing less than or equal to groupThreshold rectangles are rejected. In each other
|
||||||
|
cluster, the average rectangle is computed and put into the output rectangle list.
|
||||||
|
*/
|
||||||
CV_EXPORTS void groupRectangles(std::vector<Rect>& rectList, int groupThreshold, double eps = 0.2);
|
CV_EXPORTS void groupRectangles(std::vector<Rect>& rectList, int groupThreshold, double eps = 0.2);
|
||||||
|
/** @overload */
|
||||||
CV_EXPORTS_W void groupRectangles(CV_IN_OUT std::vector<Rect>& rectList, CV_OUT std::vector<int>& weights,
|
CV_EXPORTS_W void groupRectangles(CV_IN_OUT std::vector<Rect>& rectList, CV_OUT std::vector<int>& weights,
|
||||||
int groupThreshold, double eps = 0.2);
|
int groupThreshold, double eps = 0.2);
|
||||||
|
/** @overload */
|
||||||
CV_EXPORTS void groupRectangles(std::vector<Rect>& rectList, int groupThreshold,
|
CV_EXPORTS void groupRectangles(std::vector<Rect>& rectList, int groupThreshold,
|
||||||
double eps, std::vector<int>* weights, std::vector<double>* levelWeights );
|
double eps, std::vector<int>* weights, std::vector<double>* levelWeights );
|
||||||
|
/** @overload */
|
||||||
CV_EXPORTS void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& rejectLevels,
|
CV_EXPORTS void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& rejectLevels,
|
||||||
std::vector<double>& levelWeights, int groupThreshold, double eps = 0.2);
|
std::vector<double>& levelWeights, int groupThreshold, double eps = 0.2);
|
||||||
|
/** @overload */
|
||||||
CV_EXPORTS void groupRectangles_meanshift(std::vector<Rect>& rectList, std::vector<double>& foundWeights,
|
CV_EXPORTS void groupRectangles_meanshift(std::vector<Rect>& rectList, std::vector<double>& foundWeights,
|
||||||
std::vector<double>& foundScales,
|
std::vector<double>& foundScales,
|
||||||
double detectThreshold = 0.0, Size winDetSize = Size(64, 128));
|
double detectThreshold = 0.0, Size winDetSize = Size(64, 128));
|
||||||
@ -133,15 +215,54 @@ public:
|
|||||||
virtual Ptr<MaskGenerator> getMaskGenerator() = 0;
|
virtual Ptr<MaskGenerator> getMaskGenerator() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @brief Cascade classifier class for object detection.
|
||||||
|
*/
|
||||||
class CV_EXPORTS_W CascadeClassifier
|
class CV_EXPORTS_W CascadeClassifier
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CV_WRAP CascadeClassifier();
|
CV_WRAP CascadeClassifier();
|
||||||
|
/** @brief Loads a classifier from a file.
|
||||||
|
|
||||||
|
@param filename Name of the file from which the classifier is loaded.
|
||||||
|
*/
|
||||||
CV_WRAP CascadeClassifier(const String& filename);
|
CV_WRAP CascadeClassifier(const String& filename);
|
||||||
~CascadeClassifier();
|
~CascadeClassifier();
|
||||||
|
/** @brief Checks whether the classifier has been loaded.
|
||||||
|
*/
|
||||||
CV_WRAP bool empty() const;
|
CV_WRAP bool empty() const;
|
||||||
|
/** @brief Loads a classifier from a file.
|
||||||
|
|
||||||
|
@param filename Name of the file from which the classifier is loaded. The file may contain an old
|
||||||
|
HAAR classifier trained by the haartraining application or a new cascade classifier trained by the
|
||||||
|
traincascade application.
|
||||||
|
*/
|
||||||
CV_WRAP bool load( const String& filename );
|
CV_WRAP bool load( const String& filename );
|
||||||
|
/** @brief Reads a classifier from a FileStorage node.
|
||||||
|
|
||||||
|
@note The file may contain a new cascade classifier (trained traincascade application) only.
|
||||||
|
*/
|
||||||
CV_WRAP bool read( const FileNode& node );
|
CV_WRAP bool read( const FileNode& node );
|
||||||
|
|
||||||
|
/** @brief Detects objects of different sizes in the input image. The detected objects are returned as a list
|
||||||
|
of rectangles.
|
||||||
|
|
||||||
|
@param image Matrix of the type CV_8U containing an image where objects are detected.
|
||||||
|
@param objects Vector of rectangles where each rectangle contains the detected object, the
|
||||||
|
rectangles may be partially outside the original image.
|
||||||
|
@param scaleFactor Parameter specifying how much the image size is reduced at each image scale.
|
||||||
|
@param minNeighbors Parameter specifying how many neighbors each candidate rectangle should have
|
||||||
|
to retain it.
|
||||||
|
@param flags Parameter with the same meaning for an old cascade as in the function
|
||||||
|
cvHaarDetectObjects. It is not used for a new cascade.
|
||||||
|
@param minSize Minimum possible object size. Objects smaller than that are ignored.
|
||||||
|
@param maxSize Maximum possible object size. Objects larger than that are ignored.
|
||||||
|
|
||||||
|
The function is parallelized with the TBB library.
|
||||||
|
|
||||||
|
@note
|
||||||
|
- (Python) A face detection example using cascade classifiers can be found at
|
||||||
|
opencv_source_code/samples/python2/facedetect.py
|
||||||
|
*/
|
||||||
CV_WRAP void detectMultiScale( InputArray image,
|
CV_WRAP void detectMultiScale( InputArray image,
|
||||||
CV_OUT std::vector<Rect>& objects,
|
CV_OUT std::vector<Rect>& objects,
|
||||||
double scaleFactor = 1.1,
|
double scaleFactor = 1.1,
|
||||||
@ -149,6 +270,21 @@ public:
|
|||||||
Size minSize = Size(),
|
Size minSize = Size(),
|
||||||
Size maxSize = Size() );
|
Size maxSize = Size() );
|
||||||
|
|
||||||
|
/** @overload
|
||||||
|
@param image Matrix of the type CV_8U containing an image where objects are detected.
|
||||||
|
@param objects Vector of rectangles where each rectangle contains the detected object, the
|
||||||
|
rectangles may be partially outside the original image.
|
||||||
|
@param numDetections Vector of detection numbers for the corresponding objects. An object's number
|
||||||
|
of detections is the number of neighboring positively classified rectangles that were joined
|
||||||
|
together to form the object.
|
||||||
|
@param scaleFactor Parameter specifying how much the image size is reduced at each image scale.
|
||||||
|
@param minNeighbors Parameter specifying how many neighbors each candidate rectangle should have
|
||||||
|
to retain it.
|
||||||
|
@param flags Parameter with the same meaning for an old cascade as in the function
|
||||||
|
cvHaarDetectObjects. It is not used for a new cascade.
|
||||||
|
@param minSize Minimum possible object size. Objects smaller than that are ignored.
|
||||||
|
@param maxSize Maximum possible object size. Objects larger than that are ignored.
|
||||||
|
*/
|
||||||
CV_WRAP_AS(detectMultiScale2) void detectMultiScale( InputArray image,
|
CV_WRAP_AS(detectMultiScale2) void detectMultiScale( InputArray image,
|
||||||
CV_OUT std::vector<Rect>& objects,
|
CV_OUT std::vector<Rect>& objects,
|
||||||
CV_OUT std::vector<int>& numDetections,
|
CV_OUT std::vector<int>& numDetections,
|
||||||
@ -157,6 +293,9 @@ public:
|
|||||||
Size minSize=Size(),
|
Size minSize=Size(),
|
||||||
Size maxSize=Size() );
|
Size maxSize=Size() );
|
||||||
|
|
||||||
|
/** @overload
|
||||||
|
if `outputRejectLevels` is `true` returns `rejectLevels` and `levelWeights`
|
||||||
|
*/
|
||||||
CV_WRAP_AS(detectMultiScale3) void detectMultiScale( InputArray image,
|
CV_WRAP_AS(detectMultiScale3) void detectMultiScale( InputArray image,
|
||||||
CV_OUT std::vector<Rect>& objects,
|
CV_OUT std::vector<Rect>& objects,
|
||||||
CV_OUT std::vector<int>& rejectLevels,
|
CV_OUT std::vector<int>& rejectLevels,
|
||||||
@ -184,14 +323,14 @@ CV_EXPORTS Ptr<BaseCascadeClassifier::MaskGenerator> createFaceDetectionMaskGene
|
|||||||
|
|
||||||
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
|
//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector //////////////
|
||||||
|
|
||||||
// struct for detection region of interest (ROI)
|
//! struct for detection region of interest (ROI)
|
||||||
struct DetectionROI
|
struct DetectionROI
|
||||||
{
|
{
|
||||||
// scale(size) of the bounding box
|
//! scale(size) of the bounding box
|
||||||
double scale;
|
double scale;
|
||||||
// set of requrested locations to be evaluated
|
//! set of requrested locations to be evaluated
|
||||||
std::vector<cv::Point> locations;
|
std::vector<cv::Point> locations;
|
||||||
// vector that will contain confidence values for each location
|
//! vector that will contain confidence values for each location
|
||||||
std::vector<double> confidences;
|
std::vector<double> confidences;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -250,24 +389,24 @@ public:
|
|||||||
Size winStride = Size(), Size padding = Size(),
|
Size winStride = Size(), Size padding = Size(),
|
||||||
const std::vector<Point>& locations = std::vector<Point>()) const;
|
const std::vector<Point>& locations = std::vector<Point>()) const;
|
||||||
|
|
||||||
//with found weights output
|
//! with found weights output
|
||||||
CV_WRAP virtual void detect(const Mat& img, CV_OUT std::vector<Point>& foundLocations,
|
CV_WRAP virtual void detect(const Mat& img, CV_OUT std::vector<Point>& foundLocations,
|
||||||
CV_OUT std::vector<double>& weights,
|
CV_OUT std::vector<double>& weights,
|
||||||
double hitThreshold = 0, Size winStride = Size(),
|
double hitThreshold = 0, Size winStride = Size(),
|
||||||
Size padding = Size(),
|
Size padding = Size(),
|
||||||
const std::vector<Point>& searchLocations = std::vector<Point>()) const;
|
const std::vector<Point>& searchLocations = std::vector<Point>()) const;
|
||||||
//without found weights output
|
//! without found weights output
|
||||||
virtual void detect(const Mat& img, CV_OUT std::vector<Point>& foundLocations,
|
virtual void detect(const Mat& img, CV_OUT std::vector<Point>& foundLocations,
|
||||||
double hitThreshold = 0, Size winStride = Size(),
|
double hitThreshold = 0, Size winStride = Size(),
|
||||||
Size padding = Size(),
|
Size padding = Size(),
|
||||||
const std::vector<Point>& searchLocations=std::vector<Point>()) const;
|
const std::vector<Point>& searchLocations=std::vector<Point>()) const;
|
||||||
|
|
||||||
//with result weights output
|
//! with result weights output
|
||||||
CV_WRAP virtual void detectMultiScale(InputArray img, CV_OUT std::vector<Rect>& foundLocations,
|
CV_WRAP virtual void detectMultiScale(InputArray img, CV_OUT std::vector<Rect>& foundLocations,
|
||||||
CV_OUT std::vector<double>& foundWeights, double hitThreshold = 0,
|
CV_OUT std::vector<double>& foundWeights, double hitThreshold = 0,
|
||||||
Size winStride = Size(), Size padding = Size(), double scale = 1.05,
|
Size winStride = Size(), Size padding = Size(), double scale = 1.05,
|
||||||
double finalThreshold = 2.0,bool useMeanshiftGrouping = false) const;
|
double finalThreshold = 2.0,bool useMeanshiftGrouping = false) const;
|
||||||
//without found weights output
|
//! without found weights output
|
||||||
virtual void detectMultiScale(InputArray img, CV_OUT std::vector<Rect>& foundLocations,
|
virtual void detectMultiScale(InputArray img, CV_OUT std::vector<Rect>& foundLocations,
|
||||||
double hitThreshold = 0, Size winStride = Size(),
|
double hitThreshold = 0, Size winStride = Size(),
|
||||||
Size padding = Size(), double scale = 1.05,
|
Size padding = Size(), double scale = 1.05,
|
||||||
@ -295,24 +434,26 @@ public:
|
|||||||
CV_PROP int nlevels;
|
CV_PROP int nlevels;
|
||||||
|
|
||||||
|
|
||||||
// evaluate specified ROI and return confidence value for each location
|
//! evaluate specified ROI and return confidence value for each location
|
||||||
virtual void detectROI(const cv::Mat& img, const std::vector<cv::Point> &locations,
|
virtual void detectROI(const cv::Mat& img, const std::vector<cv::Point> &locations,
|
||||||
CV_OUT std::vector<cv::Point>& foundLocations, CV_OUT std::vector<double>& confidences,
|
CV_OUT std::vector<cv::Point>& foundLocations, CV_OUT std::vector<double>& confidences,
|
||||||
double hitThreshold = 0, cv::Size winStride = Size(),
|
double hitThreshold = 0, cv::Size winStride = Size(),
|
||||||
cv::Size padding = Size()) const;
|
cv::Size padding = Size()) const;
|
||||||
|
|
||||||
// evaluate specified ROI and return confidence value for each location in multiple scales
|
//! evaluate specified ROI and return confidence value for each location in multiple scales
|
||||||
virtual void detectMultiScaleROI(const cv::Mat& img,
|
virtual void detectMultiScaleROI(const cv::Mat& img,
|
||||||
CV_OUT std::vector<cv::Rect>& foundLocations,
|
CV_OUT std::vector<cv::Rect>& foundLocations,
|
||||||
std::vector<DetectionROI>& locations,
|
std::vector<DetectionROI>& locations,
|
||||||
double hitThreshold = 0,
|
double hitThreshold = 0,
|
||||||
int groupThreshold = 0) const;
|
int groupThreshold = 0) const;
|
||||||
|
|
||||||
// read/parse Dalal's alt model file
|
//! read/parse Dalal's alt model file
|
||||||
void readALTModel(String modelfile);
|
void readALTModel(String modelfile);
|
||||||
void groupRectangles(std::vector<cv::Rect>& rectList, std::vector<double>& weights, int groupThreshold, double eps) const;
|
void groupRectangles(std::vector<cv::Rect>& rectList, std::vector<double>& weights, int groupThreshold, double eps) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} objdetect
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "opencv2/objdetect/detection_based_tracker.hpp"
|
#include "opencv2/objdetect/detection_based_tracker.hpp"
|
||||||
|
@ -51,6 +51,10 @@
|
|||||||
|
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//! @addtogroup objdetect
|
||||||
|
//! @{
|
||||||
|
|
||||||
class CV_EXPORTS DetectionBasedTracker
|
class CV_EXPORTS DetectionBasedTracker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -211,6 +215,9 @@ class CV_EXPORTS DetectionBasedTracker
|
|||||||
cv::Rect calcTrackedObjectPositionToShow(int i, ObjectStatus& status) const;
|
cv::Rect calcTrackedObjectPositionToShow(int i, ObjectStatus& status) const;
|
||||||
void detectInRegion(const cv::Mat& img, const cv::Rect& r, std::vector<cv::Rect>& detectedObjectsInRegions);
|
void detectInRegion(const cv::Mat& img, const cv::Rect& r, std::vector<cv::Rect>& detectedObjectsInRegions);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! @} objdetect
|
||||||
|
|
||||||
} //end of cv namespace
|
} //end of cv namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user