Я разрабатываю приложение для Android, чтобы обнаружить все контуры изображения и нарисовать их с помощью Opencv.
Я тестировал одно и то же изображение, и все работало нормально.
Но как толькоЯ изменил то же изображение, но с другой контрастностью, обнаружение не удалось.
Также я изменил другое примерное изображение с более темным фоном, и оно снова не работает.
Вот код:
Imgproc.cvtColor(mRGBA, mGray, Imgproc.COLOR_RGB2HSV);
Core.split(mGray, channels);
mGray = channels.get(1);
Imgproc.threshold(mGray, mGray, 50, 255, Imgproc.THRESH_BINARY);
Core.meanStdDev(mGray, mu, stddev);
Imgproc.GaussianBlur(mGray, mGray, new Size(5, 5), 5);
//Imgproc.Canny(mGray, mGray, 20, 80, 3, false);
Imgproc.Canny(mGray, mGray, mu.get(0, 0)[0], stddev.get(0, 0)[0], 3, false);
Mat kernell = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(9,9));
Imgproc.morphologyEx(mGray, mGray, Imgproc.MORPH_CLOSE, kernell);
Imgproc.dilate(mGray, mGray, Imgproc.getStructuringElement(Imgproc.MORPH_CROSS, new Size(3, 3)));
Вот первый пример изображения
Результат обработки
Вот второй пример изображения
И вот результат
Я должен указать на тот факт, что если я удаляю порог изображения, алгоритм отлично работает для одного и того же изображения с различной интенсивностью света и разной контрастностью, но работает только с изображениями на белом фоне.
Есть ли способ применить Canny универсальным способом?