我一直在尝试使用OpenCV进行2D矩阵的卷积。我实际上经历了这段代码http://blog.timmlinder.com/2011/07/opencv-equivalent-to-matlabs-conv2-function/#respond,但只有在肯定的情况下它才能给出正确的答案。在Matlab中有像OpenCV或C++这样的简单函数吗?

这是一个例子:

A= [
  1 -2
  3  4
]

我想将它与[-0.707 0.707]卷积

Matlab的conv2结果是
 -0.7071    2.1213   -1.4142
 -2.1213   -0.7071    2.8284

一些函数可以在OpenCV或C++中计算此输出?我将不胜感激。

最佳答案

如果您需要专有的OpenCV解决方案,请使用 cv2.filter2D 函数。但是,如果要获得与matlab相同的正确输出,则应调整borderType标志。

>>> A = np.array([ [1,-2],[3,4] ]).astype('float32')
>>> A
array([[ 1., -2.],
       [ 3.,  4.]], dtype=float32)

>>> B = np.array([[ 0.707,-0.707]])
>>> B
array([[ 0.707, -0.707]])

>>> cv2.filter2D(A2,-1,B,borderType = cv2.BORDER_CONSTANT)
array([[-0.70700002,  2.12100005, -1.41400003],
       [-2.12100005, -0.70700002,  2.82800007]], dtype=float32)

borderType很重要。要查找卷积,您需要数组外部的值。如果要获得类似matlab的输出,则需要传递cv2.BORDER_CONSTANT。看到输出的大小大于输入的大小。

10-06 01:59