我认为这个问题可能是规模问题之一:如果您输入的图像是8位图像,则在大多数情况下,卷积会产生一个溢出最大值255的值。
在您的实现中,看起来好像获得了环绕值,但是大多数OpenCV函数通过将最大值设置为最大值(或最小值)来处理溢出。这就解释了为什么OpenCV函数的大部分输出都是白色的,以及为什么在输出中也得到同心的形状。
为了解决这个问题,请通过将每个值除以过滤器的总和来归一化您的megapixelarray
过滤器(即,确保过滤器值的总和为1):
例如,代替此过滤器(sum = 10):
1 1 1
1 2 1
1 1 1
尝试使用此过滤器(总和= 1):
0.1 0.1 0.1
0.1 0.2 0.1
0.1 0.1 0.1
0
我确实在寻找Filter2D的源代码,但找不到它。 Visual c ++也不行。这里有关于filter2D算法的专家吗?我知道它应该如何工作,但实际上却不知道。我制作了自己的filter2d()函数来测试事物,结果与opencvs filter2D()完全不同。这是我的代码:
有人看到我的实现有问题吗? (除了慢)
这是我的死刑:
这是我的内核:
这是(基本上不同的)结果:
有什么想法吗?
编辑:感谢布莱恩斯回答我添加了此代码:
和filter2d效果更好。某些过滤器会给出完全匹配的结果,而其他过滤器(如Sobel) 会惨败。
我正在接近实际算法,但是还没有。还有其他想法吗?