11

How to pad an array(cv::Mat) with zeros in OpenCV?

4
  • what do you mean by padding in this context? Commented Jul 31, 2012 at 10:15
  • @juanchopanza I mean making a bigger array with zeros around the original array.
    – A S
    Commented Jul 31, 2012 at 10:18
  • Can't you make an array full of zeros, and then fill the relevant block with data from the smaller array? Commented Jul 31, 2012 at 10:21
  • @juanchopanza I'm sure that would work, I just don't know how to do that! If you do, help is appreciated.
    – A S
    Commented Jul 31, 2012 at 10:23

2 Answers 2

29

An another way to pad an image is to use copyMakeBorder function:

 C++: void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar() )

Then padding with zeros is simply like that

Mat image,image_pad;
copyMakeBorder(image,image_pad,1,1,1,1,BORDER_CONSTANT,Scalar(0));

Finally, here is the tutorial of Adding borders to your images.

18

Here is a way to do it

cv::Mat img(100, 100, CV_8UC3);
cv::Mat padded;
int padding = 3;
padded.create(img.rows + 2*padding, img.cols + 2*padding, img.type());
padded.setTo(cv::Scalar::all(0));

img.copyTo(padded(Rect(padding, padding, img.cols, img.rows)));
1
  • You need to switch between the rows and cols in the Rect. This is the function declaration Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height)
    – ifryed
    Commented Jan 12, 2016 at 12:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.