Add static creator for TVL1 optical flow class
This commit is contained in:
parent
be4312ec3d
commit
6e3b90de9b
@ -358,6 +358,17 @@ Ptr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5&
|
||||
return Ptr<T>(new T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));
|
||||
}
|
||||
|
||||
template<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
|
||||
Ptr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, const A10& a10, const A11& a11)
|
||||
{
|
||||
return Ptr<T>(new T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11));
|
||||
}
|
||||
|
||||
template<typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
|
||||
Ptr<T> makePtr(const A1& a1, const A2& a2, const A3& a3, const A4& a4, const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, const A10& a10, const A11& a11, const A12& a12)
|
||||
{
|
||||
return Ptr<T>(new T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12));
|
||||
}
|
||||
} // namespace cv
|
||||
|
||||
//! @endcond
|
||||
|
@ -502,6 +502,21 @@ public:
|
||||
virtual int getMedianFiltering() const = 0;
|
||||
/** @copybrief getMedianFiltering @see getMedianFiltering */
|
||||
virtual void setMedianFiltering(int val) = 0;
|
||||
|
||||
/** @brief Creates instance of cv::DualTVL1OpticalFlow*/
|
||||
static Ptr<DualTVL1OpticalFlow> create(
|
||||
double tau = 0.25,
|
||||
double lambda = 0.15,
|
||||
double theta = 0.3,
|
||||
int nscales = 5,
|
||||
int warps = 5,
|
||||
double epsilon = 0.01,
|
||||
int innnerIterations = 30,
|
||||
int outerIterations = 10,
|
||||
double scaleStep = 0.8,
|
||||
double gamma = 0.0,
|
||||
int medianFiltering = 5,
|
||||
bool useInitialFlow = false);
|
||||
};
|
||||
|
||||
/** @brief Creates instance of cv::DenseOpticalFlow
|
||||
|
@ -89,6 +89,17 @@ namespace {
|
||||
class OpticalFlowDual_TVL1 : public DualTVL1OpticalFlow
|
||||
{
|
||||
public:
|
||||
|
||||
OpticalFlowDual_TVL1(double tau_, double lambda_, double theta_, int nscales_, int warps_,
|
||||
double epsilon_, int innerIterations_, int outerIterations_,
|
||||
double scaleStep_, double gamma_, int medianFiltering_,
|
||||
bool useInitialFlow_) :
|
||||
tau(tau_), lambda(lambda_), theta(theta_), gamma(gamma_), nscales(nscales_),
|
||||
warps(warps_), epsilon(epsilon_), innerIterations(innerIterations_),
|
||||
outerIterations(outerIterations_), useInitialFlow(useInitialFlow_),
|
||||
scaleStep(scaleStep_), medianFiltering(medianFiltering_)
|
||||
{
|
||||
}
|
||||
OpticalFlowDual_TVL1();
|
||||
|
||||
void calc(InputArray I0, InputArray I1, InputOutputArray flow);
|
||||
@ -1450,3 +1461,13 @@ Ptr<DualTVL1OpticalFlow> cv::createOptFlow_DualTVL1()
|
||||
{
|
||||
return makePtr<OpticalFlowDual_TVL1>();
|
||||
}
|
||||
|
||||
Ptr<DualTVL1OpticalFlow> cv::DualTVL1OpticalFlow::create(
|
||||
double tau, double lambda, double theta, int nscales, int warps,
|
||||
double epsilon, int innerIterations, int outerIterations, double scaleStep,
|
||||
double gamma, int medianFilter, bool useInitialFlow)
|
||||
{
|
||||
return makePtr<OpticalFlowDual_TVL1>(tau, lambda, theta, nscales, warps,
|
||||
epsilon, innerIterations, outerIterations,
|
||||
scaleStep, gamma, medianFilter, useInitialFlow);
|
||||
}
|
||||
|
@ -154,7 +154,7 @@ TEST(Video_calcOpticalFlowDual_TVL1, Regression)
|
||||
ASSERT_FALSE(frame2.empty());
|
||||
|
||||
Mat_<Point2f> flow;
|
||||
Ptr<DenseOpticalFlow> tvl1 = createOptFlow_DualTVL1();
|
||||
Ptr<DualTVL1OpticalFlow> tvl1 = cv::DualTVL1OpticalFlow::create();
|
||||
|
||||
tvl1->calc(frame1, frame2, flow);
|
||||
|
||||
|
@ -185,7 +185,7 @@ int main(int argc, const char* argv[])
|
||||
}
|
||||
|
||||
Mat_<Point2f> flow;
|
||||
Ptr<DenseOpticalFlow> tvl1 = createOptFlow_DualTVL1();
|
||||
Ptr<DualTVL1OpticalFlow> tvl1 = cv::DualTVL1OpticalFlow::create();
|
||||
|
||||
const double start = (double)getTickCount();
|
||||
tvl1->calc(frame0, frame1, flow);
|
||||
|
Loading…
x
Reference in New Issue
Block a user