No OpenCV, o filtro Scharr existe em conjunto com a operação do operador Sobel. Quando o kernel Sobel tem 3, o resultado pode produzir erros mais óbvios. Em resposta a esse problema, o OpenCV fornece a função scharr. Essa função tem alvo apenas os kernels do tamanho 3, e a taxa de cálculo é tão rápida quanto a função Sobel, e o resultado é mais preciso, mas a resistência ao ruído não é tão boa quanto a função Sobel.
Use o filtro SCHARR para calcular a diferença de imagem na direção x ou y, e suas variáveis de parâmetro são as mesmas que Sobel.
Função: imgproc.sCharr (MAT SRC, MAT DST, int ddepth, int dx, int dy, escala dupla, delta duplo, int bordertype)
Descrição do parâmetro:
SRC: imagem de origem
DST: imagem do resultado da detecção
ddepth: a profundidade da imagem de saída
DX: a ordem da diferença na direção x
DY: a ordem da diferença na direção y
Escala: fator de escala
Delta: o valor delta opcional antes que o resultado seja armazenado na imagem de saída, o padrão é 0
BorderType: Modo de limite, Border_default padrão
Código de exemplo:
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, novo tamanho (3, 3), 0); Imgproc.cvtcolor (dst, dst, imgproc.color_rgb2gray); Imgproc.sCharr (dst, dstx, -1, 1, 0, 1, 0, cor.border_default); Imgcodececs.imwrite ("f: //dstx.jpg", dstx); Imgproc.sCharr (dst, dsty, -1, 0, 1, 1, 0, cor.border_default); Imgcodec.imwrite ("f: //dsty.jpg", dsty); Core.Addweighted (DSTX, 0,5, dsty, 0,5, 0, DST); Imgcodec.imwrite ("f: //dst.jpg", dst); } Imagem de origem:
Scharr na direção X:
SCHARR na direção Y:
Depois de fundir os gradientes:
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.