c++ - filter2d - opencv gabor
El equivalente de Conv2 de Matlab en OpenCV (2)
Si desea una solución exclusiva de OpenCV, use la función cv2.filter2D . Pero debe ajustar el indicador borderType si desea obtener el resultado correcto como el de matlab.
>>> 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 es importante. Para encontrar la convolución necesita valores fuera de la matriz. Si desea obtener un resultado similar a matlab, debe pasar cv2.BORDER_CONSTANT. Ver salida es mayor en tamaño que entrada.
He estado tratando de hacer la Convolución de una Matriz 2D usando OpenCV. En realidad revisé este código http://blog.timmlinder.com/2011/07/opencv-equivalent-to-matlabs-conv2-function/#respond pero arroja respuestas correctas solo en casos positivos. ¿Hay una función simple como conv2 en Matlab para OpenCV o C ++?
Aquí hay un ejemplo:
A= [
1 -2
3 4
]
Quiero [-0.707 0.707]
con [-0.707 0.707]
Y el resultado como por conv2 de Matlab es
-0.7071 2.1213 -1.4142
-2.1213 -0.7071 2.8284
Algunos funcionan para calcular esta salida en OpenCV o C ++? Estaré agradecido por una respuesta.
Si está utilizando OpenCV con enlace de Python 2, puede utilizar Scipy siempre que sus imágenes sean ndarrays:
>>> from scipy import signal
>>> A = np.array([[1,-2], [3,4]])
>>> B = np.array([[-0.707, 0.707]])
>>> signal.convolve2d(A,B)
array([[-0.707, 2.121, -1.414],
[-2.121, -0.707, 2.828]])
Asegúrese de utilizar el modo completo (que está configurado de manera predeterminada) si desea obtener el mismo resultado que en un matlab, siempre y cuando use el "mismo" modo, Scipy se centrará de forma diferente a Matlab.