int ksize, anchor;
};
class cv::BaseColumnFilter {
public:
virtual ~BaseColumnFilter();
// To be overriden by the user.
//
// runs a filtering operation on the set of rows,
// "dstcount + ksize - 1" rows on input,
// "dstcount" rows on output,
// each input and output row has "width" elements
// the filtered rows are written into "dst" buffer.
//
virtual void operator()(
const uchar** src,
uchar* dst,
int dststep,
int dstcount,
int width
) = 0;
// resets the filter state (may be needed for IIR filters)
//
virtual void reset();
int ksize, anchor;
};
The cv::BaseRowFilter class is the simplest because row data is sequential in memory, and so there
is a little less bookkeeping. The associated cv::BaseRowFilter::operator() inherits this relative
simplicity. The arguments are just the pointers to the source and destination rows, the width of the rows,
and the number of channels, cn. As with cv::BaseFilter::operator(), the source and destination
pointers are of type uchar*, and so it will be your responsibility to cast them to the correct type.
The cv::BaseColumnFilter class needs to handle the non-sequential nature of the required data. As a
result, there are the additional arguments dststep and dstcount, which the row filter did not require
28
.
These have the same meaning as they did for the cv::BaseFilter() class.
Base Filter Builders
There will