Мне нужно иметь возможность определять края карты, в настоящее время она работает, когда фон не нарушает работу, и лучше всего, когда он контрастный, но все еще работает довольно хорошо на неконтрастном фоне.
Проблема возникает, когда карта находится на разрушающем фоне, двусторонний фильтр пропускает слишком много шума и вызывает неточное определение краев.
Вот код, который я использую:
bilateralFilter(imgGray, detectedEdges, 0, 175, 3, 0);
Canny( detectedEdges, detectedEdges, 20, 65, 3 );
dilate(detectedEdges, detectedEdges, Mat::ones(3,3,CV_8UC1));
imgGray
будучи серой версией оригинального изображения.
Вот несколько тестов на разрушительный фон и результаты (контактная информация искажена на всех изображениях):
Цветная карта:
Результат:
А вот и белая карточка:
Результаты:
Может кто-нибудь сказать мне, как я могу сохранить края карты независимо от фона, цвета при удалении шума?
Найти края, используя canny
что вы уже делаете, затем найдите contour
в образе и найти подходящий rectangle using bounding box
и применить некоторый порог на занятость и размеры прямоугольника. Это должно привести к нулю к вашему прямоугольнику, то есть к краям вашей карты, и принять его как ROI
на котором вы можете дальше работать.