mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
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));
|
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
|
} // namespace cv
|
||||||
|
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
@ -502,6 +502,21 @@ public:
|
|||||||
virtual int getMedianFiltering() const = 0;
|
virtual int getMedianFiltering() const = 0;
|
||||||
/** @copybrief getMedianFiltering @see getMedianFiltering */
|
/** @copybrief getMedianFiltering @see getMedianFiltering */
|
||||||
virtual void setMedianFiltering(int val) = 0;
|
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
|
/** @brief Creates instance of cv::DenseOpticalFlow
|
||||||
|
@ -89,6 +89,17 @@ namespace {
|
|||||||
class OpticalFlowDual_TVL1 : public DualTVL1OpticalFlow
|
class OpticalFlowDual_TVL1 : public DualTVL1OpticalFlow
|
||||||
{
|
{
|
||||||
public:
|
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();
|
OpticalFlowDual_TVL1();
|
||||||
|
|
||||||
void calc(InputArray I0, InputArray I1, InputOutputArray flow);
|
void calc(InputArray I0, InputArray I1, InputOutputArray flow);
|
||||||
@ -1450,3 +1461,13 @@ Ptr<DualTVL1OpticalFlow> cv::createOptFlow_DualTVL1()
|
|||||||
{
|
{
|
||||||
return makePtr<OpticalFlowDual_TVL1>();
|
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());
|
ASSERT_FALSE(frame2.empty());
|
||||||
|
|
||||||
Mat_<Point2f> flow;
|
Mat_<Point2f> flow;
|
||||||
Ptr<DenseOpticalFlow> tvl1 = createOptFlow_DualTVL1();
|
Ptr<DualTVL1OpticalFlow> tvl1 = cv::DualTVL1OpticalFlow::create();
|
||||||
|
|
||||||
tvl1->calc(frame1, frame2, flow);
|
tvl1->calc(frame1, frame2, flow);
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ int main(int argc, const char* argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
Mat_<Point2f> flow;
|
Mat_<Point2f> flow;
|
||||||
Ptr<DenseOpticalFlow> tvl1 = createOptFlow_DualTVL1();
|
Ptr<DualTVL1OpticalFlow> tvl1 = cv::DualTVL1OpticalFlow::create();
|
||||||
|
|
||||||
const double start = (double)getTickCount();
|
const double start = (double)getTickCount();
|
||||||
tvl1->calc(frame0, frame1, flow);
|
tvl1->calc(frame0, frame1, flow);
|
||||||
|
Loading…
Reference in New Issue
Block a user