Umbral adaptable rápido para Canny Edge Detector en Android

Según mi investigación, Canny Edge Detector es muy útil para detectar el borde de una imagen. Después de poner mucho esfuerzo en ello, encontré que la función OpenCV puede hacer eso, que es

Imgproc.Canny(Mat image, Mat edges, double threshold1, double threshold2) 

Pero para el umbral bajo y umbral alto, sé que la imagen diferente tiene umbral diferente, así que puedo saber si hay algún método de umbral adaptativo rápido puede asignar automáticamente el umbral bajo y alto según la imagen diferente?

    Esto es relativamente fácil de hacer. Echa un vistazo a este puesto más antiguo SO sobre el tema.

    Una forma rápida es calcular la media y la desviación estándar de la imagen actual y aplicar +/- una desviación estándar a la imagen.

    El ejemplo en C ++ sería algo como:

     Mat img = ...; Scalar mu, sigma; meanStdDev(img, mu, sigma); Mat edges; Canny(img, edges, mu.val[0] - sigma.val[0], mu.val[0] + sigma.val[0]); 

    Otro método consiste en calcular la mediana de la imagen y fijar una relación por encima y por debajo de la mediana (por ejemplo, 0.66*medianValue y 1.33*medianValue ).

    ¡Espero que ayude!

    Opencv tiene una función de umbral adaptativo. Con OpenCV4Android es como esto:

     Imgproc.adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C); 

    Un ejemplo:

     Imgproc.adaptiveThreshold(mInput, mInput, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 15, 4); 

    En cuanto a cómo elegir los parámetros, usted tiene que leer los documentos para más detalles. Elegir el umbral correcto para cada imagen es una pregunta completamente diferente.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.