diff --git a/openbr/plugins/imgproc/pad.cpp b/openbr/plugins/imgproc/pad.cpp index 2e4de15..3c40221 100644 --- a/openbr/plugins/imgproc/pad.cpp +++ b/openbr/plugins/imgproc/pad.cpp @@ -1,3 +1,4 @@ +#include #include using namespace cv; @@ -5,24 +6,36 @@ using namespace cv; namespace br { +/*! + * \ingroup transforms + * \brief Pads an image. + * \author Scott Klum \cite sklum + */ class PadTransform : public UntrainableTransform { Q_OBJECT - - Q_PROPERTY(int padSize READ get_padSize WRITE set_padSize RESET reset_padSize STORED false) - Q_PROPERTY(int padValue READ get_padValue WRITE set_padValue RESET reset_padValue STORED false) - BR_PROPERTY(int, padSize, 0) - BR_PROPERTY(int, padValue, 0) + Q_ENUMS(Method) + +public: + /*!< */ + enum Border { Replicate = BORDER_REPLICATE, + Reflect = BORDER_REFLECT_101, + Constant = BORDER_CONSTANT}; + +private: + Q_PROPERTY(Border border READ get_border WRITE set_border RESET reset_border STORED false) + Q_PROPERTY(float percent READ get_percent WRITE set_percent RESET reset_percent STORED false) + Q_PROPERTY(int value READ get_value WRITE set_value RESET reset_value STORED false) + BR_PROPERTY(Border, border, Replicate) + BR_PROPERTY(float, percent, .1) + BR_PROPERTY(float, value, 0) void project(const Template &src, Template &dst) const { - dst.file = src.file; - - foreach (const Mat &m, src) { - Mat padded = padValue * Mat::ones(m.rows + 2*padSize, m.cols + 2*padSize, m.type()); - padded(Rect(padSize, padSize, padded.cols - padSize, padded.rows - padSize)) = m; - dst += padded; - } + int top, bottom, left, right; + top = percent*src.m().rows; bottom = percent*src.m().rows; + left = percent*src.m().cols; right = percent*src.m().cols; + copyMakeBorder(src, dst, top, bottom, left, right, border, Scalar(value)); } };