cv::FilterEngine::start() (somewhat unnecessarily) returns the computed start
source row.
The first cv::FilterEngine::start() method returns the computed first row, but
adjusted into the “coordinates” of the parent view (if the source image is
actually a view on a larger array.)
The cv::FilterEngine::apply() method computes the destination pointer for the first
destination pixel. This is just the data area for the source image offset by the
“true” start row multiplied by the source step.
The cv::FilterEngine::apply() method computes the total number of rows that will be
analyzed (using the difference of the two row value member variables computed earlier
by cv::FilterEngine::start()).
The cv::FilterEngine::apply() method computes the address of the first pixel in the
destination image to be computed.
cv::FilterEngine::apply() method calls the (generic) cv::FilterEngine::proceed()
method, passing it the locations of the first source pixel, the first destination
pixel, the source step, the destination step, the total number of rows to be “used” to
compute all destination pixels.
For each destination pixel, cv::FilterEngine proceed() calls the member operator()
of the rowFilter member of the cv::FilterEngine (our cv::RowSum<> object), passing
it the source pointer, the destination pointer, and the width of the given to
apply (which in this case is null) or the width of the image. ...