How to pad an array(cv::Mat
) with zeros in OpenCV?
-
what do you mean by padding in this context?– juanchopanzaCommented Jul 31, 2012 at 10:15
-
@juanchopanza I mean making a bigger array with zeros around the original array.– A SCommented 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?– juanchopanzaCommented 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 SCommented Jul 31, 2012 at 10:23
Add a comment
|
2 Answers
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.
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)));
-
You need to switch between the rows and cols in the
Rect
. This is the function declarationRect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height)
– ifryedCommented Jan 12, 2016 at 12:44