gabor filter2d example cvsmooth bilateral c++ image opencv image-processing convolution

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.