使用openCV Blur和BORDER_CONSTANT选项?

时间:2016-01-15 12:52:00

标签: opencv padding

我正在尝试创建一个可以采用所有可能的填充选项的模糊功能。但是对于BORDER_CONSTANT,您还需要提供颜色,即要填充图像的数字。在opencv的模糊文档中,我没有看到功能模糊的过载,需要填充和颜色值。有谁知道怎么克服这个?

我想做的一件事就是先填充图像,然后模糊一些感兴趣的区域,根本没有填充,但我找不到办法。

我提到了提到的问题,所以基本上我会知道这是否重复。这个问题与cv :: blur有关,它也处理填充,但是没有为BORDER_CONSTANT添加边框值的选项。我在问是否有人知道解决方法。

2 个答案:

答案 0 :(得分:1)

如果您按照blur的源代码进行操作,那么当borderTypeBORDER_CONSTANT时,边框的值将为Scalar(0,0,0,0) }。

快速进行逆向工程...如果您创建一个白色(255)CV_8UC1矩阵,blur带有3x3过滤器和BORDER_CONSTANT,您就是&#39 ;看到结果是:

enter image description here

在您获得的角度(255*4 + 0*5) / 9 = 113中,您将获得(255*6 + 0*3) / 9 = 170的边界。这表明填充是零。

示例代码:

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    Mat1b img(5,5,uchar(255));
    blur(img, img, Size(3, 3), Point(-1, -1), BORDER_CONSTANT);
    return 0;
}

答案 1 :(得分:0)

基本上我在原帖中所假设的是正确的。如果有人关心解决方案,请点击:

copyMakeBorder(image_in_mat, image_in_mat, r, r, r, r, BORDER_CONSTANT, Scalar(myNumbers));
ROI = Rect(r, r, w, h);
image_in_ROI = image_in_mat(ROI);
blur(image_in_ROI, image_out_mat, Size(blockSize, blockSize), Point(-1, -1));

其中r是您想要填充的半径; w,h是原始图像的宽度和高度; myNumbers - 您想要填充的颜色; image_in_mat - 输入图像。