Calculates optical flow for overlapped blocks block_size.width * block_size.height pixels each, thus the velocity fields are smaller than the original images. For every block in prev the functions tries to find a similar block in curr in some neighborhood of the original block or shifted by (velx(x0,y0),vely(x0,y0)) block as has been calculated by previous function call (if use_previous=1)

C# | Visual Basic | Visual C++ |
public static void cvCalcOpticalFlowBM( IntPtr prev, IntPtr curr, MCvSize block_size, MCvSize shift_size, MCvSize max_range, int use_previous, IntPtr velx, IntPtr vely )

- prev (IntPtr)
- First image, 8-bit, single-channel.
- curr (IntPtr)
- Second image, 8-bit, single-channel.
- block_size (MCvSize)
- Size of basic blocks that are compared.
- shift_size (MCvSize)
- Block coordinate increments.
- max_range (MCvSize)
- Size of the scanned neighborhood in pixels around block.
- use_previous (Int32)
- Uses previous (input) velocity field.
- velx (IntPtr)
- Horizontal component of the optical flow of floor((prev->width - block_size.width)/shiftSize.width) x floor((prev->height - block_size.height)/shiftSize.height) size, 32-bit floating-point, single-channel.
- vely (IntPtr)
- Vertical component of the optical flow of the same size velx, 32-bit floating-point, single-channel.