我试图创建一个模糊的功能,可以采取所有可能的填充选项。然而,对于BORDER_CONSTANT,您还需要提供颜色,即您想要填充您的图像的数字。在opencv的模糊文档中,我没有看到过多的函数模糊,需要填充和颜色值。有人知道如何克服这个问题吗?
我想做的一件事是先填充图像,然后模糊一些感兴趣的区域,完全没有填充,尽管我找不到方法去做。
刚才提到的问题是我提出的,所以基本上我会知道这个问题是否重复。这个问题与cv::blur有关,后者也处理填充,但是没有为BORDER_CONSTANT添加边框值的选项。我在问有没有人知道解决办法。
发布于 2016-01-18 18:29:26
基本上,我在最初的文章中所假设的是正确的。如果有人关心这个问题的解决方案:
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 -输入图像。
发布于 2016-01-15 20:11:54
如果您遵循blur
的源代码,您将发现,当borderType
是BORDER_CONSTANT
时,边框的值将是Scalar(0,0,0,0)
。
只是一个快速的逆向工程.如果您创建一个白色(255个) CV_8UC1
矩阵,并使用一个带有BORDER_CONSTANT
的3x3
过滤器创建blur
,您将看到结果是:
在你会得到的角度:(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;
}
https://stackoverflow.com/questions/34811509
复制相似问题