public static void Farneback(
Image<Gray, Byte> prev0,
Image<Gray, Byte> next0,
Image<Gray, Single> flowX,
Image<Gray, Single> flowY,
double pyrScale,
int levels,
int winSize,
int iterations,
int polyN,
double polySigma,
CvEnum.OPTICALFLOW_FARNEBACK_FLAG flags)
{
IntPtr flow0 = CvInvoke.cvCreateImage(prev0.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_32F, 2);
try
{
if ((int) (flags & Emgu.CV.CvEnum.OPTICALFLOW_FARNEBACK_FLAG.USE_INITIAL_FLOW) != 0)
{ //use initial flow
CvInvoke.cvMerge(flowX.Ptr, flowY.Ptr, IntPtr.Zero, IntPtr.Zero, flow0);
}
CvInvoke.cvCalcOpticalFlowFarneback(prev0, next0, flow0, pyrScale, levels, winSize, iterations, polyN, polySigma, flags);
CvInvoke.cvSplit(flow0, flowX.Ptr, flowY.Ptr, IntPtr.Zero, IntPtr.Zero);
}
finally
{
CvInvoke.cvReleaseImage(ref flow0);
}
}