• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
5 //  By downloading, copying, installing or using the software you agree to this license.
6 //  If you do not agree to this license, do not download, install,
7 //  copy or use the software.
8 //
9 //
10 //                           License Agreement
11 //                For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14 // Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
15 // Third party copyrights are property of their respective owners.
16 //
17 // Redistribution and use in source and binary forms, with or without modification,
18 // are permitted provided that the following conditions are met:
19 //
20 //   * Redistribution's of source code must retain the above copyright notice,
21 //     this list of conditions and the following disclaimer.
22 //
23 //   * Redistribution's in binary form must reproduce the above copyright notice,
24 //     this list of conditions and the following disclaimer in the documentation
25 //     and/or other materials provided with the distribution.
26 //
27 //   * The name of the copyright holders may not be used to endorse or promote products
28 //     derived from this software without specific prior written permission.
29 //
30 // This software is provided by the copyright holders and contributors "as is" and
31 // any express or implied warranties, including, but not limited to, the implied
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
33 // In no event shall the Intel Corporation or contributors be liable for any direct,
34 // indirect, incidental, special, exemplary, or consequential damages
35 // (including, but not limited to, procurement of substitute goods or services;
36 // loss of use, data, or profits; or business interruption) however caused
37 // and on any theory of liability, whether in contract, strict liability,
38 // or tort (including negligence or otherwise) arising in any way out of
39 // the use of this software, even if advised of the possibility of such damage.
40 //
41 //M*/
42 
43 #ifndef __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__
44 #define __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__
45 
46 #include "opencv2/core.hpp"
47 #include "opencv2/opencv_modules.hpp"
48 
49 #ifdef HAVE_OPENCV_CUDAOPTFLOW
50   #include "opencv2/cudaoptflow.hpp"
51 #endif
52 
53 namespace cv
54 {
55 namespace videostab
56 {
57 
58 //! @addtogroup videostab
59 //! @{
60 
61 class CV_EXPORTS ISparseOptFlowEstimator
62 {
63 public:
~ISparseOptFlowEstimator()64     virtual ~ISparseOptFlowEstimator() {}
65     virtual void run(
66             InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,
67             OutputArray status, OutputArray errors) = 0;
68 };
69 
70 class CV_EXPORTS IDenseOptFlowEstimator
71 {
72 public:
~IDenseOptFlowEstimator()73     virtual ~IDenseOptFlowEstimator() {}
74     virtual void run(
75             InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,
76             OutputArray errors) = 0;
77 };
78 
79 class CV_EXPORTS PyrLkOptFlowEstimatorBase
80 {
81 public:
PyrLkOptFlowEstimatorBase()82     PyrLkOptFlowEstimatorBase() { setWinSize(Size(21, 21)); setMaxLevel(3); }
83 
setWinSize(Size val)84     virtual void setWinSize(Size val) { winSize_ = val; }
winSize() const85     virtual Size winSize() const { return winSize_; }
86 
setMaxLevel(int val)87     virtual void setMaxLevel(int val) { maxLevel_ = val; }
maxLevel() const88     virtual int maxLevel() const { return maxLevel_; }
~PyrLkOptFlowEstimatorBase()89     virtual ~PyrLkOptFlowEstimatorBase() {}
90 
91 protected:
92     Size winSize_;
93     int maxLevel_;
94 };
95 
96 class CV_EXPORTS SparsePyrLkOptFlowEstimator
97         : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator
98 {
99 public:
100     virtual void run(
101             InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,
102             OutputArray status, OutputArray errors);
103 };
104 
105 #ifdef HAVE_OPENCV_CUDAOPTFLOW
106 
107 class CV_EXPORTS SparsePyrLkOptFlowEstimatorGpu
108         : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator
109 {
110 public:
111     SparsePyrLkOptFlowEstimatorGpu();
112 
113     virtual void run(
114             InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,
115             OutputArray status, OutputArray errors);
116 
117     void run(const cuda::GpuMat &frame0, const cuda::GpuMat &frame1, const cuda::GpuMat &points0, cuda::GpuMat &points1,
118              cuda::GpuMat &status, cuda::GpuMat &errors);
119 
120     void run(const cuda::GpuMat &frame0, const cuda::GpuMat &frame1, const cuda::GpuMat &points0, cuda::GpuMat &points1,
121              cuda::GpuMat &status);
122 
123 private:
124     Ptr<cuda::SparsePyrLKOpticalFlow> optFlowEstimator_;
125     cuda::GpuMat frame0_, frame1_, points0_, points1_, status_, errors_;
126 };
127 
128 class CV_EXPORTS DensePyrLkOptFlowEstimatorGpu
129         : public PyrLkOptFlowEstimatorBase, public IDenseOptFlowEstimator
130 {
131 public:
132     DensePyrLkOptFlowEstimatorGpu();
133 
134     virtual void run(
135             InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,
136             OutputArray errors);
137 
138 private:
139     Ptr<cuda::DensePyrLKOpticalFlow> optFlowEstimator_;
140     cuda::GpuMat frame0_, frame1_, flowX_, flowY_, errors_;
141 };
142 
143 #endif
144 
145 //! @}
146 
147 } // namespace videostab
148 } // namespace cv
149 
150 #endif
151