我正在尝试创建一个可以采用所有可能的填充选项的模糊功能。但是对于BORDER_CONSTANT,您还需要提供颜色,即要填充图像的数字。在opencv的模糊文档中,我没有看到功能模糊的过载,需要填充和颜色值。有谁知道怎么克服这个?
我想做的一件事就是先填充图像,然后模糊一些感兴趣的区域,根本没有填充,但我找不到办法。
我提到了提到的问题,所以基本上我会知道这是否重复。这个问题与cv :: blur有关,它也处理填充,但是没有为BORDER_CONSTANT添加边框值的选项。我在问是否有人知道解决方法。
答案 0 :(得分:1)
如果您按照blur
的源代码进行操作,那么当borderType
为BORDER_CONSTANT
时,边框的值将为Scalar(0,0,0,0)
}。
快速进行逆向工程...如果您创建一个白色(255)CV_8UC1
矩阵,blur
带有3x3
过滤器和BORDER_CONSTANT
,您就是&#39 ;看到结果是:
在您获得的角度(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 - 输入图像。