我注意到C++中filter2D的OpenCV实现与相应内核的直接实现之间的差异。我已阅读了以下问题:filter2D OpenCV函数C++
Opencv - how does the filter2D() method actually work?
这个问题,笔者曾试图让filter2D功能的工作落实。他声称使用规范化版本的过滤器会产生正确的结果。我测试了他的假设,发现只有当所有系数都是正数时,归一化才能给出正确的答案。因此,使用filter2D函数可以成功实现平均滤波器[我们必须对内核进行规格化]。
但是,对于具有负系数的滤波器,例如Sobel,Laplacian和任何边缘检测滤波器,情况并非如此。这个问题的作者遇到了和我一样的问题。
https://stackoverflow.com/users/2669614/bovaz
上面提到的用户回答的链接的问题。他声称,如果内核的系数总和等于零,filter2D可能会修改它的实现。是这样吗?为什么在C +中实现filter2D会给直接实现带来不同的结果?我已经在Python中检查了filter2D,并且直接在C++中实现相应的内核,结果相同。