parent
abc9ef6809
commit
fd7bf0b766
39 changed files with 1317 additions and 413 deletions
@ -0,0 +1,31 @@ |
||||
if(ANDROID OR IOS) |
||||
ocv_module_disable(gpunonfree) |
||||
endif() |
||||
|
||||
set(the_description "GPU-accelerated Computer Vision (non free)") |
||||
ocv_add_module(gpunonfree opencv_gpu opencv_nonfree) |
||||
ocv_module_include_directories() |
||||
|
||||
if(HAVE_CUDA) |
||||
ocv_source_group("Src\\Cuda" GLOB "src/cuda/*.cu") |
||||
ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include" ${CUDA_INCLUDE_DIRS}) |
||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) |
||||
|
||||
file(GLOB lib_cuda "src/cuda/*.cu") |
||||
ocv_cuda_compile(cuda_objs ${lib_cuda}) |
||||
|
||||
set(cuda_link_libs ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) |
||||
else() |
||||
set(lib_cuda "") |
||||
set(cuda_objs "") |
||||
set(cuda_link_libs "") |
||||
endif() |
||||
|
||||
ocv_glob_module_sources(SOURCES ${lib_cuda} ${cuda_objs}) |
||||
|
||||
ocv_create_module(${cuda_link_libs}) |
||||
ocv_add_precompiled_headers(${the_module}) |
||||
|
||||
ocv_add_accuracy_tests() |
||||
ocv_add_perf_tests() |
||||
|
@ -0,0 +1,107 @@ |
||||
Feature Detection and Description |
||||
================================= |
||||
|
||||
.. highlight:: cpp |
||||
|
||||
|
||||
|
||||
gpu::SURF_GPU |
||||
------------- |
||||
.. ocv:class:: gpu::SURF_GPU |
||||
|
||||
Class used for extracting Speeded Up Robust Features (SURF) from an image. :: |
||||
|
||||
class SURF_GPU |
||||
{ |
||||
public: |
||||
enum KeypointLayout |
||||
{ |
||||
X_ROW = 0, |
||||
Y_ROW, |
||||
LAPLACIAN_ROW, |
||||
OCTAVE_ROW, |
||||
SIZE_ROW, |
||||
ANGLE_ROW, |
||||
HESSIAN_ROW, |
||||
ROWS_COUNT |
||||
}; |
||||
|
||||
//! the default constructor |
||||
SURF_GPU(); |
||||
//! the full constructor taking all the necessary parameters |
||||
explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, |
||||
int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f); |
||||
|
||||
//! returns the descriptor size in float's (64 or 128) |
||||
int descriptorSize() const; |
||||
|
||||
//! upload host keypoints to device memory |
||||
void uploadKeypoints(const vector<KeyPoint>& keypoints, |
||||
GpuMat& keypointsGPU); |
||||
//! download keypoints from device to host memory |
||||
void downloadKeypoints(const GpuMat& keypointsGPU, |
||||
vector<KeyPoint>& keypoints); |
||||
|
||||
//! download descriptors from device to host memory |
||||
void downloadDescriptors(const GpuMat& descriptorsGPU, |
||||
vector<float>& descriptors); |
||||
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, |
||||
GpuMat& keypoints); |
||||
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, |
||||
GpuMat& keypoints, GpuMat& descriptors, |
||||
bool useProvidedKeypoints = false, |
||||
bool calcOrientation = true); |
||||
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, |
||||
std::vector<KeyPoint>& keypoints); |
||||
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, |
||||
std::vector<KeyPoint>& keypoints, GpuMat& descriptors, |
||||
bool useProvidedKeypoints = false, |
||||
bool calcOrientation = true); |
||||
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, |
||||
std::vector<KeyPoint>& keypoints, |
||||
std::vector<float>& descriptors, |
||||
bool useProvidedKeypoints = false, |
||||
bool calcOrientation = true); |
||||
|
||||
void releaseMemory(); |
||||
|
||||
// SURF parameters |
||||
double hessianThreshold; |
||||
int nOctaves; |
||||
int nOctaveLayers; |
||||
bool extended; |
||||
bool upright; |
||||
|
||||
//! max keypoints = keypointsRatio * img.size().area() |
||||
float keypointsRatio; |
||||
|
||||
GpuMat sum, mask1, maskSum, intBuffer; |
||||
|
||||
GpuMat det, trace; |
||||
|
||||
GpuMat maxPosBuffer; |
||||
}; |
||||
|
||||
|
||||
The class ``SURF_GPU`` implements Speeded Up Robust Features descriptor. There is a fast multi-scale Hessian keypoint detector that can be used to find the keypoints (which is the default option). But the descriptors can also be computed for the user-specified keypoints. Only 8-bit grayscale images are supported. |
||||
|
||||
The class ``SURF_GPU`` can store results in the GPU and CPU memory. It provides functions to convert results between CPU and GPU version ( ``uploadKeypoints``, ``downloadKeypoints``, ``downloadDescriptors`` ). The format of CPU results is the same as ``SURF`` results. GPU results are stored in ``GpuMat``. The ``keypoints`` matrix is :math:`\texttt{nFeatures} \times 7` matrix with the ``CV_32FC1`` type. |
||||
|
||||
* ``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>(LAPLACIAN_ROW)[i]`` contains the laplacian sign 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. |
||||
* ``keypoints.ptr<float>(ANGLE_ROW)[i]`` contain orientation of the i-th feature. |
||||
* ``keypoints.ptr<float>(HESSIAN_ROW)[i]`` contains the response of the i-th feature. |
||||
|
||||
The ``descriptors`` matrix is :math:`\texttt{nFeatures} \times \texttt{descriptorSize}` matrix with the ``CV_32FC1`` type. |
||||
|
||||
The class ``SURF_GPU`` uses some buffers and provides access to it. All buffers can be safely released between function calls. |
||||
|
||||
.. seealso:: :ocv:class:`SURF` |
@ -0,0 +1,9 @@ |
||||
****************************************************** |
||||
gpunonfree. GPU-accelerated Computer Vision (non free) |
||||
****************************************************** |
||||
|
||||
.. toctree:: |
||||
:maxdepth: 1 |
||||
|
||||
feature_detection_and_description |
||||
video |
@ -0,0 +1,79 @@ |
||||
Video Analysis |
||||
============== |
||||
|
||||
.. highlight:: cpp |
||||
|
||||
|
||||
|
||||
gpu::VIBE_GPU |
||||
------------- |
||||
.. ocv:class:: gpu::VIBE_GPU |
||||
|
||||
Class used for background/foreground segmentation. :: |
||||
|
||||
class VIBE_GPU |
||||
{ |
||||
public: |
||||
explicit VIBE_GPU(unsigned long rngSeed = 1234567); |
||||
|
||||
void initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()); |
||||
|
||||
void operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()); |
||||
|
||||
void release(); |
||||
|
||||
... |
||||
}; |
||||
|
||||
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 [VIBE2011]_. |
||||
|
||||
|
||||
|
||||
gpu::VIBE_GPU::VIBE_GPU |
||||
----------------------- |
||||
The constructor. |
||||
|
||||
.. ocv:function:: gpu::VIBE_GPU::VIBE_GPU(unsigned long rngSeed = 1234567) |
||||
|
||||
:param rngSeed: Value used to initiate a random sequence. |
||||
|
||||
Default constructor sets all parameters to default values. |
||||
|
||||
|
||||
|
||||
gpu::VIBE_GPU::initialize |
||||
------------------------- |
||||
Initialize background model and allocates all inner buffers. |
||||
|
||||
.. ocv:function:: void gpu::VIBE_GPU::initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()) |
||||
|
||||
:param firstFrame: First frame from video sequence. |
||||
|
||||
:param stream: Stream for the asynchronous version. |
||||
|
||||
|
||||
|
||||
gpu::VIBE_GPU::operator() |
||||
------------------------- |
||||
Updates the background model and returns the foreground mask |
||||
|
||||
.. ocv:function:: void gpu::VIBE_GPU::operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()) |
||||
|
||||
:param frame: Next video frame. |
||||
|
||||
:param fgmask: The output foreground mask as an 8-bit binary image. |
||||
|
||||
:param stream: Stream for the asynchronous version. |
||||
|
||||
|
||||
|
||||
gpu::VIBE_GPU::release |
||||
---------------------- |
||||
Releases all inner buffer's memory. |
||||
|
||||
.. ocv:function:: void gpu::VIBE_GPU::release() |
||||
|
||||
|
||||
|
||||
|
||||
.. [VIBE2011] O. Barnich and M. Van D Roogenbroeck. *ViBe: A universal background subtraction algorithm for video sequences*. IEEE Transactions on Image Processing, 20(6) :1709-1724, June 2011 |
@ -0,0 +1,167 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other GpuMaterials provided with the distribution.
|
||||
//
|
||||
// * The name of the copyright holders may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#ifndef __OPENCV_GPUNONFREE_HPP__ |
||||
#define __OPENCV_GPUNONFREE_HPP__ |
||||
|
||||
#ifndef SKIP_INCLUDES |
||||
#include <vector> |
||||
#endif |
||||
|
||||
#include "opencv2/gpu/gpu.hpp" |
||||
|
||||
namespace cv { namespace gpu { |
||||
|
||||
class CV_EXPORTS SURF_GPU |
||||
{ |
||||
public: |
||||
enum KeypointLayout |
||||
{ |
||||
X_ROW = 0, |
||||
Y_ROW, |
||||
LAPLACIAN_ROW, |
||||
OCTAVE_ROW, |
||||
SIZE_ROW, |
||||
ANGLE_ROW, |
||||
HESSIAN_ROW, |
||||
ROWS_COUNT |
||||
}; |
||||
|
||||
//! the default constructor
|
||||
SURF_GPU(); |
||||
//! the full constructor taking all the necessary parameters
|
||||
explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, |
||||
int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f, bool _upright = false); |
||||
|
||||
//! returns the descriptor size in float's (64 or 128)
|
||||
int descriptorSize() const; |
||||
|
||||
//! upload host keypoints to device memory
|
||||
void uploadKeypoints(const std::vector<KeyPoint>& keypoints, GpuMat& keypointsGPU); |
||||
//! download keypoints from device to host memory
|
||||
void downloadKeypoints(const GpuMat& keypointsGPU, std::vector<KeyPoint>& keypoints); |
||||
|
||||
//! download descriptors from device to host memory
|
||||
void downloadDescriptors(const GpuMat& descriptorsGPU, std::vector<float>& descriptors); |
||||
|
||||
//! finds the keypoints using fast hessian detector used in SURF
|
||||
//! supports CV_8UC1 images
|
||||
//! keypoints will have nFeature cols and 6 rows
|
||||
//! keypoints.ptr<float>(X_ROW)[i] will contain x coordinate of i'th feature
|
||||
//! keypoints.ptr<float>(Y_ROW)[i] will contain y coordinate of i'th feature
|
||||
//! keypoints.ptr<float>(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature
|
||||
//! keypoints.ptr<float>(OCTAVE_ROW)[i] will contain octave of i'th feature
|
||||
//! keypoints.ptr<float>(SIZE_ROW)[i] will contain size of i'th feature
|
||||
//! keypoints.ptr<float>(ANGLE_ROW)[i] will contain orientation of i'th feature
|
||||
//! keypoints.ptr<float>(HESSIAN_ROW)[i] will contain response of i'th feature
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints); |
||||
//! finds the keypoints and computes their descriptors.
|
||||
//! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors, |
||||
bool useProvidedKeypoints = false); |
||||
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints); |
||||
void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors, |
||||
bool useProvidedKeypoints = false); |
||||
|
||||
void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, std::vector<float>& descriptors, |
||||
bool useProvidedKeypoints = false); |
||||
|
||||
void releaseMemory(); |
||||
|
||||
// SURF parameters
|
||||
double hessianThreshold; |
||||
int nOctaves; |
||||
int nOctaveLayers; |
||||
bool extended; |
||||
bool upright; |
||||
|
||||
//! max keypoints = min(keypointsRatio * img.size().area(), 65535)
|
||||
float keypointsRatio; |
||||
|
||||
GpuMat sum, mask1, maskSum, intBuffer; |
||||
|
||||
GpuMat det, trace; |
||||
|
||||
GpuMat maxPosBuffer; |
||||
}; |
||||
|
||||
/*!
|
||||
* The class implements the following algorithm: |
||||
* "ViBe: A universal background subtraction algorithm for video sequences" |
||||
* O. Barnich and M. Van D Roogenbroeck |
||||
* IEEE Transactions on Image Processing, 20(6) :1709-1724, June 2011 |
||||
*/ |
||||
class CV_EXPORTS VIBE_GPU |
||||
{ |
||||
public: |
||||
//! the default constructor
|
||||
explicit VIBE_GPU(unsigned long rngSeed = 1234567); |
||||
|
||||
//! re-initiaization method
|
||||
void initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()); |
||||
|
||||
//! the update operator
|
||||
void operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()); |
||||
|
||||
//! releases all inner buffers
|
||||
void release(); |
||||
|
||||
int nbSamples; // number of samples per pixel
|
||||
int reqMatches; // #_min
|
||||
int radius; // R
|
||||
int subsamplingFactor; // amount of random subsampling
|
||||
|
||||
private: |
||||
Size frameSize_; |
||||
|
||||
unsigned long rngSeed_; |
||||
GpuMat randStates_; |
||||
|
||||
GpuMat samples_; |
||||
}; |
||||
|
||||
} // namespace gpu
|
||||
|
||||
} // namespace cv
|
||||
|
||||
#endif /* __OPENCV_GPUNONFREE_HPP__ */ |
@ -0,0 +1,118 @@ |
||||
#include "perf_precomp.hpp" |
||||
|
||||
using namespace std; |
||||
using namespace testing; |
||||
using namespace perf; |
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// SURF
|
||||
|
||||
DEF_PARAM_TEST_1(Image, string); |
||||
|
||||
PERF_TEST_P(Image, Features2D_SURF, |
||||
Values<string>("gpu/perf/aloe.png")) |
||||
{ |
||||
declare.time(50.0); |
||||
|
||||
const cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE); |
||||
ASSERT_FALSE(img.empty()); |
||||
|
||||
if (PERF_RUN_GPU()) |
||||
{ |
||||
cv::gpu::SURF_GPU d_surf; |
||||
|
||||
const cv::gpu::GpuMat d_img(img); |
||||
cv::gpu::GpuMat d_keypoints, d_descriptors; |
||||
|
||||
TEST_CYCLE() d_surf(d_img, cv::gpu::GpuMat(), d_keypoints, d_descriptors); |
||||
|
||||
std::vector<cv::KeyPoint> gpu_keypoints; |
||||
d_surf.downloadKeypoints(d_keypoints, gpu_keypoints); |
||||
|
||||
cv::Mat gpu_descriptors(d_descriptors); |
||||
|
||||
sortKeyPoints(gpu_keypoints, gpu_descriptors); |
||||
|
||||
SANITY_CHECK_KEYPOINTS(gpu_keypoints); |
||||
SANITY_CHECK(gpu_descriptors, 1e-3); |
||||
} |
||||
else |
||||
{ |
||||
cv::SURF surf; |
||||
|
||||
std::vector<cv::KeyPoint> cpu_keypoints; |
||||
cv::Mat cpu_descriptors; |
||||
|
||||
TEST_CYCLE() surf(img, cv::noArray(), cpu_keypoints, cpu_descriptors); |
||||
|
||||
SANITY_CHECK_KEYPOINTS(cpu_keypoints); |
||||
SANITY_CHECK(cpu_descriptors); |
||||
} |
||||
} |
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// VIBE
|
||||
|
||||
DEF_PARAM_TEST(Video_Cn, string, int); |
||||
|
||||
PERF_TEST_P(Video_Cn, Video_VIBE, |
||||
Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), |
||||
GPU_CHANNELS_1_3_4)) |
||||
{ |
||||
const string inputFile = perf::TestBase::getDataPath(GET_PARAM(0)); |
||||
const int cn = GET_PARAM(1); |
||||
|
||||
cv::VideoCapture cap(inputFile); |
||||
ASSERT_TRUE(cap.isOpened()); |
||||
|
||||
cv::Mat frame; |
||||
cap >> frame; |
||||
ASSERT_FALSE(frame.empty()); |
||||
|
||||
if (cn != 3) |
||||
{ |
||||
cv::Mat temp; |
||||
if (cn == 1) |
||||
cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY); |
||||
else |
||||
cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA); |
||||
cv::swap(temp, frame); |
||||
} |
||||
|
||||
if (PERF_RUN_GPU()) |
||||
{ |
||||
cv::gpu::GpuMat d_frame(frame); |
||||
cv::gpu::VIBE_GPU vibe; |
||||
cv::gpu::GpuMat foreground; |
||||
|
||||
vibe(d_frame, foreground); |
||||
|
||||
for (int i = 0; i < 10; ++i) |
||||
{ |
||||
cap >> frame; |
||||
ASSERT_FALSE(frame.empty()); |
||||
|
||||
if (cn != 3) |
||||
{ |
||||
cv::Mat temp; |
||||
if (cn == 1) |
||||
cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY); |
||||
else |
||||
cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA); |
||||
cv::swap(temp, frame); |
||||
} |
||||
|
||||
d_frame.upload(frame); |
||||
|
||||
startTimer(); next(); |
||||
vibe(d_frame, foreground); |
||||
stopTimer(); |
||||
} |
||||
|
||||
GPU_SANITY_CHECK(foreground); |
||||
} |
||||
else |
||||
{ |
||||
FAIL_NO_CPU(); |
||||
} |
||||
} |
@ -0,0 +1,5 @@ |
||||
#include "perf_precomp.hpp" |
||||
|
||||
using namespace perf; |
||||
|
||||
CV_PERF_TEST_MAIN(gpunonfree, printCudaInfo()) |
@ -0,0 +1 @@ |
||||
#include "perf_precomp.hpp" |
@ -0,0 +1,31 @@ |
||||
#ifdef __GNUC__ |
||||
# pragma GCC diagnostic ignored "-Wmissing-declarations" |
||||
# if defined __clang__ || defined __APPLE__ |
||||
# pragma GCC diagnostic ignored "-Wmissing-prototypes" |
||||
# pragma GCC diagnostic ignored "-Wextra" |
||||
# endif |
||||
#endif |
||||
|
||||
#ifndef __OPENCV_PERF_PRECOMP_HPP__ |
||||
#define __OPENCV_PERF_PRECOMP_HPP__ |
||||
|
||||
#include <cstdio> |
||||
#include <iostream> |
||||
|
||||
#include "cvconfig.h" |
||||
|
||||
#include "opencv2/ts/ts.hpp" |
||||
#include "opencv2/ts/ts_perf.hpp" |
||||
#include "opencv2/ts/gpu_perf.hpp" |
||||
|
||||
#include "opencv2/core/core.hpp" |
||||
#include "opencv2/highgui/highgui.hpp" |
||||
#include "opencv2/gpu/gpu.hpp" |
||||
#include "opencv2/gpunonfree/gpunonfree.hpp" |
||||
#include "opencv2/nonfree/nonfree.hpp" |
||||
|
||||
#ifdef GTEST_CREATE_SHARED_LIBRARY |
||||
#error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined |
||||
#endif |
||||
|
||||
#endif |
@ -0,0 +1,45 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// Intel License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#include "precomp.hpp" |
||||
|
||||
/* End of file. */ |
||||
|
@ -0,0 +1,71 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of the copyright holders may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#ifndef __OPENCV_PRECOMP_H__ |
||||
#define __OPENCV_PRECOMP_H__ |
||||
|
||||
#if defined _MSC_VER && _MSC_VER >= 1200 |
||||
#pragma warning( disable: 4251 4710 4711 4514 4996 ) |
||||
#endif |
||||
|
||||
#ifdef HAVE_CVCONFIG_H |
||||
#include "cvconfig.h" |
||||
#endif |
||||
|
||||
#include <vector> |
||||
|
||||
#include "opencv2/gpu/gpu.hpp" |
||||
#include "opencv2/gpunonfree/gpunonfree.hpp" |
||||
|
||||
#ifdef HAVE_CUDA |
||||
#include "opencv2/gpu/stream_accessor.hpp" |
||||
#include "opencv2/gpu/device/common.hpp" |
||||
|
||||
static inline void throw_nogpu() { CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); } |
||||
|
||||
#else /* defined(HAVE_CUDA) */ |
||||
|
||||
static inline void throw_nogpu() { CV_Error(CV_GpuNotSupported, "The library is compiled without GPU support"); } |
||||
|
||||
#endif /* defined(HAVE_CUDA) */ |
||||
|
||||
#endif /* __OPENCV_PRECOMP_H__ */ |
@ -0,0 +1,286 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// Intel License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#include "test_precomp.hpp" |
||||
|
||||
#ifdef HAVE_CUDA |
||||
|
||||
using namespace cvtest; |
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// SURF
|
||||
|
||||
namespace |
||||
{ |
||||
IMPLEMENT_PARAM_CLASS(SURF_HessianThreshold, double) |
||||
IMPLEMENT_PARAM_CLASS(SURF_Octaves, int) |
||||
IMPLEMENT_PARAM_CLASS(SURF_OctaveLayers, int) |
||||
IMPLEMENT_PARAM_CLASS(SURF_Extended, bool) |
||||
IMPLEMENT_PARAM_CLASS(SURF_Upright, bool) |
||||
} |
||||
|
||||
PARAM_TEST_CASE(SURF, cv::gpu::DeviceInfo, SURF_HessianThreshold, SURF_Octaves, SURF_OctaveLayers, SURF_Extended, SURF_Upright) |
||||
{ |
||||
cv::gpu::DeviceInfo devInfo; |
||||
double hessianThreshold; |
||||
int nOctaves; |
||||
int nOctaveLayers; |
||||
bool extended; |
||||
bool upright; |
||||
|
||||
virtual void SetUp() |
||||
{ |
||||
devInfo = GET_PARAM(0); |
||||
hessianThreshold = GET_PARAM(1); |
||||
nOctaves = GET_PARAM(2); |
||||
nOctaveLayers = GET_PARAM(3); |
||||
extended = GET_PARAM(4); |
||||
upright = GET_PARAM(5); |
||||
|
||||
cv::gpu::setDevice(devInfo.deviceID()); |
||||
} |
||||
}; |
||||
|
||||
GPU_TEST_P(SURF, Detector) |
||||
{ |
||||
cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); |
||||
ASSERT_FALSE(image.empty()); |
||||
|
||||
cv::gpu::SURF_GPU surf; |
||||
surf.hessianThreshold = hessianThreshold; |
||||
surf.nOctaves = nOctaves; |
||||
surf.nOctaveLayers = nOctaveLayers; |
||||
surf.extended = extended; |
||||
surf.upright = upright; |
||||
surf.keypointsRatio = 0.05f; |
||||
|
||||
if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) |
||||
{ |
||||
try |
||||
{ |
||||
std::vector<cv::KeyPoint> keypoints; |
||||
surf(loadMat(image), cv::gpu::GpuMat(), keypoints); |
||||
} |
||||
catch (const cv::Exception& e) |
||||
{ |
||||
ASSERT_EQ(CV_StsNotImplemented, e.code); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
std::vector<cv::KeyPoint> keypoints; |
||||
surf(loadMat(image), cv::gpu::GpuMat(), keypoints); |
||||
|
||||
cv::SURF surf_gold; |
||||
surf_gold.hessianThreshold = hessianThreshold; |
||||
surf_gold.nOctaves = nOctaves; |
||||
surf_gold.nOctaveLayers = nOctaveLayers; |
||||
surf_gold.extended = extended; |
||||
surf_gold.upright = upright; |
||||
|
||||
std::vector<cv::KeyPoint> keypoints_gold; |
||||
surf_gold(image, cv::noArray(), keypoints_gold); |
||||
|
||||
ASSERT_EQ(keypoints_gold.size(), keypoints.size()); |
||||
int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); |
||||
double matchedRatio = static_cast<double>(matchedCount) / keypoints_gold.size(); |
||||
|
||||
EXPECT_GT(matchedRatio, 0.95); |
||||
} |
||||
} |
||||
|
||||
GPU_TEST_P(SURF, Detector_Masked) |
||||
{ |
||||
cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); |
||||
ASSERT_FALSE(image.empty()); |
||||
|
||||
cv::Mat mask(image.size(), CV_8UC1, cv::Scalar::all(1)); |
||||
mask(cv::Range(0, image.rows / 2), cv::Range(0, image.cols / 2)).setTo(cv::Scalar::all(0)); |
||||
|
||||
cv::gpu::SURF_GPU surf; |
||||
surf.hessianThreshold = hessianThreshold; |
||||
surf.nOctaves = nOctaves; |
||||
surf.nOctaveLayers = nOctaveLayers; |
||||
surf.extended = extended; |
||||
surf.upright = upright; |
||||
surf.keypointsRatio = 0.05f; |
||||
|
||||
if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) |
||||
{ |
||||
try |
||||
{ |
||||
std::vector<cv::KeyPoint> keypoints; |
||||
surf(loadMat(image), loadMat(mask), keypoints); |
||||
} |
||||
catch (const cv::Exception& e) |
||||
{ |
||||
ASSERT_EQ(CV_StsNotImplemented, e.code); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
std::vector<cv::KeyPoint> keypoints; |
||||
surf(loadMat(image), loadMat(mask), keypoints); |
||||
|
||||
cv::SURF surf_gold; |
||||
surf_gold.hessianThreshold = hessianThreshold; |
||||
surf_gold.nOctaves = nOctaves; |
||||
surf_gold.nOctaveLayers = nOctaveLayers; |
||||
surf_gold.extended = extended; |
||||
surf_gold.upright = upright; |
||||
|
||||
std::vector<cv::KeyPoint> keypoints_gold; |
||||
surf_gold(image, mask, keypoints_gold); |
||||
|
||||
ASSERT_EQ(keypoints_gold.size(), keypoints.size()); |
||||
int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); |
||||
double matchedRatio = static_cast<double>(matchedCount) / keypoints_gold.size(); |
||||
|
||||
EXPECT_GT(matchedRatio, 0.95); |
||||
} |
||||
} |
||||
|
||||
GPU_TEST_P(SURF, Descriptor) |
||||
{ |
||||
cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); |
||||
ASSERT_FALSE(image.empty()); |
||||
|
||||
cv::gpu::SURF_GPU surf; |
||||
surf.hessianThreshold = hessianThreshold; |
||||
surf.nOctaves = nOctaves; |
||||
surf.nOctaveLayers = nOctaveLayers; |
||||
surf.extended = extended; |
||||
surf.upright = upright; |
||||
surf.keypointsRatio = 0.05f; |
||||
|
||||
cv::SURF surf_gold; |
||||
surf_gold.hessianThreshold = hessianThreshold; |
||||
surf_gold.nOctaves = nOctaves; |
||||
surf_gold.nOctaveLayers = nOctaveLayers; |
||||
surf_gold.extended = extended; |
||||
surf_gold.upright = upright; |
||||
|
||||
if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) |
||||
{ |
||||
try |
||||
{ |
||||
std::vector<cv::KeyPoint> keypoints; |
||||
cv::gpu::GpuMat descriptors; |
||||
surf(loadMat(image), cv::gpu::GpuMat(), keypoints, descriptors); |
||||
} |
||||
catch (const cv::Exception& e) |
||||
{ |
||||
ASSERT_EQ(CV_StsNotImplemented, e.code); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
std::vector<cv::KeyPoint> keypoints; |
||||
surf_gold(image, cv::noArray(), keypoints); |
||||
|
||||
cv::gpu::GpuMat descriptors; |
||||
surf(loadMat(image), cv::gpu::GpuMat(), keypoints, descriptors, true); |
||||
|
||||
cv::Mat descriptors_gold; |
||||
surf_gold(image, cv::noArray(), keypoints, descriptors_gold, true); |
||||
|
||||
cv::BFMatcher matcher(cv::NORM_L2); |
||||
std::vector<cv::DMatch> matches; |
||||
matcher.match(descriptors_gold, cv::Mat(descriptors), matches); |
||||
|
||||
int matchedCount = getMatchedPointsCount(keypoints, keypoints, matches); |
||||
double matchedRatio = static_cast<double>(matchedCount) / keypoints.size(); |
||||
|
||||
EXPECT_GT(matchedRatio, 0.6); |
||||
} |
||||
} |
||||
|
||||
INSTANTIATE_TEST_CASE_P(GPU_Features2D, SURF, testing::Combine( |
||||
ALL_DEVICES, |
||||
testing::Values(SURF_HessianThreshold(100.0), SURF_HessianThreshold(500.0), SURF_HessianThreshold(1000.0)), |
||||
testing::Values(SURF_Octaves(3), SURF_Octaves(4)), |
||||
testing::Values(SURF_OctaveLayers(2), SURF_OctaveLayers(3)), |
||||
testing::Values(SURF_Extended(false), SURF_Extended(true)), |
||||
testing::Values(SURF_Upright(false), SURF_Upright(true)))); |
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// VIBE
|
||||
|
||||
PARAM_TEST_CASE(VIBE, cv::gpu::DeviceInfo, cv::Size, MatType, UseRoi) |
||||
{ |
||||
}; |
||||
|
||||
GPU_TEST_P(VIBE, Accuracy) |
||||
{ |
||||
const cv::gpu::DeviceInfo devInfo = GET_PARAM(0); |
||||
cv::gpu::setDevice(devInfo.deviceID()); |
||||
const cv::Size size = GET_PARAM(1); |
||||
const int type = GET_PARAM(2); |
||||
const bool useRoi = GET_PARAM(3); |
||||
|
||||
const cv::Mat fullfg(size, CV_8UC1, cv::Scalar::all(255)); |
||||
|
||||
cv::Mat frame = randomMat(size, type, 0.0, 100); |
||||
cv::gpu::GpuMat d_frame = loadMat(frame, useRoi); |
||||
|
||||
cv::gpu::VIBE_GPU vibe; |
||||
cv::gpu::GpuMat d_fgmask = createMat(size, CV_8UC1, useRoi); |
||||
vibe.initialize(d_frame); |
||||
|
||||
for (int i = 0; i < 20; ++i) |
||||
vibe(d_frame, d_fgmask); |
||||
|
||||
frame = randomMat(size, type, 160, 255); |
||||
d_frame = loadMat(frame, useRoi); |
||||
vibe(d_frame, d_fgmask); |
||||
|
||||
// now fgmask should be entirely foreground
|
||||
ASSERT_MAT_NEAR(fullfg, d_fgmask, 0); |
||||
} |
||||
|
||||
INSTANTIATE_TEST_CASE_P(GPU_Video, VIBE, testing::Combine( |
||||
ALL_DEVICES, |
||||
DIFFERENT_SIZES, |
||||
testing::Values(MatType(CV_8UC1), MatType(CV_8UC3), MatType(CV_8UC4)), |
||||
WHOLE_SUBMAT)); |
||||
|
||||
#endif // HAVE_CUDA
|
||||
|
@ -0,0 +1,119 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// Intel License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#include "test_precomp.hpp" |
||||
|
||||
#ifdef HAVE_CUDA |
||||
|
||||
using namespace std; |
||||
using namespace cv; |
||||
using namespace cv::gpu; |
||||
using namespace cvtest; |
||||
using namespace testing; |
||||
|
||||
int main(int argc, char** argv) |
||||
{ |
||||
try |
||||
{ |
||||
const char* keys = |
||||
"{ h | help ? | false | Print help}" |
||||
"{ i | info | false | Print information about system and exit }" |
||||
"{ d | device | -1 | Device on which tests will be executed (-1 means all devices) }" |
||||
; |
||||
|
||||
CommandLineParser cmd(argc, (const char**)argv, keys); |
||||
|
||||
if (cmd.get<bool>("help")) |
||||
{ |
||||
cmd.printParams(); |
||||
return 0; |
||||
} |
||||
|
||||
printCudaInfo(); |
||||
|
||||
if (cmd.get<bool>("info")) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
int device = cmd.get<int>("device"); |
||||
if (device < 0) |
||||
{ |
||||
DeviceManager::instance().loadAll(); |
||||
|
||||
cout << "Run tests on all supported devices \n" << endl; |
||||
} |
||||
else |
||||
{ |
||||
DeviceManager::instance().load(device); |
||||
|
||||
DeviceInfo info(device); |
||||
cout << "Run tests on device " << device << " [" << info.name() << "] \n" << endl; |
||||
} |
||||
|
||||
TS::ptr()->init("gpu"); |
||||
InitGoogleTest(&argc, argv); |
||||
|
||||
return RUN_ALL_TESTS(); |
||||
} |
||||
catch (const exception& e) |
||||
{ |
||||
cerr << e.what() << endl; |
||||
return -1; |
||||
} |
||||
catch (...) |
||||
{ |
||||
cerr << "Unknown error" << endl; |
||||
return -1; |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#else // HAVE_CUDA
|
||||
|
||||
int main() |
||||
{ |
||||
std::cerr << "OpenCV was built without CUDA support" << std::endl; |
||||
return 0; |
||||
} |
||||
|
||||
#endif // HAVE_CUDA
|
@ -0,0 +1,42 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// Intel License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#include "test_precomp.hpp" |
@ -0,0 +1,69 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// Intel License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#ifdef __GNUC__ |
||||
# pragma GCC diagnostic ignored "-Wmissing-declarations" |
||||
# if defined __clang__ || defined __APPLE__ |
||||
# pragma GCC diagnostic ignored "-Wmissing-prototypes" |
||||
# pragma GCC diagnostic ignored "-Wextra" |
||||
# endif |
||||
#endif |
||||
|
||||
#ifndef __OPENCV_TEST_PRECOMP_HPP__ |
||||
#define __OPENCV_TEST_PRECOMP_HPP__ |
||||
|
||||
#include "cvconfig.h" |
||||
|
||||
#include <iostream> |
||||
|
||||
#ifdef HAVE_CUDA |
||||
#include "opencv2/ts/ts.hpp" |
||||
#include "opencv2/ts/ts_perf.hpp" |
||||
#include "opencv2/ts/gpu_test.hpp" |
||||
|
||||
#include "opencv2/core/core.hpp" |
||||
#include "opencv2/highgui/highgui.hpp" |
||||
#include "opencv2/gpu/gpu.hpp" |
||||
#include "opencv2/gpunonfree/gpunonfree.hpp" |
||||
#include "opencv2/nonfree/nonfree.hpp" |
||||
#endif |
||||
|
||||
#endif |
@ -1,3 +1,3 @@ |
||||
set(the_description "Images stitching") |
||||
ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect OPTIONAL opencv_gpu opencv_nonfree) |
||||
ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect OPTIONAL opencv_gpu opencv_gpunonfree opencv_nonfree) |
||||
|
||||
|
Loading…
Reference in new issue