En OpenCV, el filtro Scharr existe junto con la operación del operador Sobel. Cuando el núcleo de Sobel es 3, el resultado puede producir errores más obvios. En respuesta a este problema, OpenCV proporciona la función Scharr. Esta función solo se dirige a los núcleos del tamaño 3, y la velocidad de cálculo es tan rápida como la función Sobel, y el resultado es más preciso, pero la resistencia al ruido no es tan buena como la función Sobel.
Use el filtro Scharr para calcular la diferencia de imagen en la dirección X o Y, y sus variables de parámetros son las mismas que Sobel.
Función: imgproc.scharr (MAT SRC, MAT DST, Int Ddepth, Int Dx, int dy, doble escala, doble delta, int bitdittype)
Descripción del parámetro:
SRC: imagen de origen
DST: imagen de resultado de detección
DDEPTH: la profundidad de la imagen de salida
DX: el orden de diferencia en la dirección x
DY: el orden de diferencia en la dirección y
Escala: factor de escala
Delta: el valor delta opcional antes de que el resultado se almacene en la imagen de salida, el valor predeterminado es 0
borderType: modo límite, predeterminado border_default
Código de muestra:
public static void main (string [] args) {system.loadLibrary (core.native_library_name); Mat src = imgcodecs.imread ("f: //2011031213205880528.jpg"); Mat dst = src.clone (); Mat dstx = src.clone (); Mat dsty = src.clone (); Imgproc.gaussianblur (SRC, DST, nuevo tamaño (3, 3), 0); Imgproc.cvtcolor (dst, dst, imgproc.color_rgb2gray); Imgproc.scharr (dst, dstx, -1, 1, 0, 1, 0, core.border_default); Imgcodecs.imwrite ("f: //dstx.jpg", dstx); Imgproc.scharr (dst, dsty, -1, 0, 1, 1, 0, core.border_default); Imgcodecs.imwrite ("f: //dsty.jpg", dsty); Core.Addweeting (DSTX, 0.5, DSTY, 0.5, 0, DST); Imgcodecs.imwrite ("f: //dst.jpg", dst); } Imagen de origen:
Scharr en la dirección X:
Scharr en y dirección:
Después de fusionar los gradientes:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.