【问题标题】:Pad array with zeros- openCV用零填充阵列 - openCV
【发布时间】:2016-05-20 17:27:50
【问题描述】:

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

【问题讨论】:

  • 在这种情况下填充是什么意思?
  • @juanchopanza 我的意思是在原始数组周围制作一个更大的数组。
  • 你不能做一个充满零的数组,然后用较小数组中的数据填充相关块吗?
  • @juanchopanza 我相信这会奏效,我只是不知道该怎么做!如果您这样做,我们将不胜感激。

标签: c++ opencv


【解决方案1】:

另一种填充图像的方法是使用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));

最后是Adding borders to your images的教程。

【讨论】:

    【解决方案2】:

    这是一种方法

    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)
    猜你喜欢
    • 2019-06-15
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2021-10-07
    相关资源
    最近更新 更多