用零填充数组- openCV

11

如何在 OpenCV 中用零填充(pad)一个数组(cv::Mat)?


在这个上下文中,填充(padding)是什么意思? - juanchopanza
@juanchopanza 我的意思是在原始数组周围添加零元素,使其变得更大。 - A S
你能不能创建一个全是零的数组,然后再用较小的数组填充相关块? - juanchopanza
@juanchopanza 我相信那会起作用,只是我不知道怎么做!如果你知道,帮助将不胜感激。 - A S
2个回答

29

另一种填充图像的方法是使用copyMakeBorder函数:

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

然后用零填充就像这样

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

最后,这里是给你的图像添加边框的教程。


18

这里有一种方法可以实现

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)));

你需要在Rect中切换行和列。这是函数声明Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height) - ifryed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接