Использование шаблонов соответствия openCV, при отсутствии нужного объекта, в любом случае находит совпадение.Как получить исключение? - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно проверить логотип на банковской карте.Можно ли исправить мой код таким образом, чтобы при несоответствии логотипа система не выполняла поиск аналогичного элемента, а выбрасывала исключение?

Я пытаюсь изменить переменныев пороговом методе, но без результата.

  private static void isTemplateImageExist(String sourceScreenshotPath,
                                                 String sourceScreenshot,
                                                 String templateScreenshotPath,
                                                 String templateImage,
                                                 String resultImage){
            CustomLogger.info("Getting images for comparing");
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
            Mat source = Highgui.imread(sourceScreenshotPath + sourceScreenshot, Highgui.CV_LOAD_IMAGE_COLOR);
            Mat template = Highgui.imread(templateScreenshotPath + templateImage);
            Mat outputImage = new Mat();
            int machMethod = Imgproc.TM_CCOEFF;
            CustomLogger.info("Comparing images");
            //Template matching method
            Imgproc.threshold(source, outputImage, 1, 250, Imgproc.THRESH_TOZERO);
            Imgproc.matchTemplate(source, template, outputImage, machMethod);
            drawRectangleOnResultImage(outputImage,source,template,sourceScreenshotPath,resultImage);
        }

Я хочу увидеть исключение, если логотип не совпадает.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Может быть, это кому-нибудь пригодится. Спасибо за идею Элвису Орику. Я беру координаты хорошего соответствия и сравниваю их с взятыми координатами. До этого я сделал константу хорошего соответствия.

private static String LOGO_POINTS_FOR_MY_CARDS_SCREEN = "{231.0, 248.0}";

private static boolean isCardsLogoExistForMyCardsScreen(String sourceScreenshotPath,
                                                        String sourceScreenshot,
                                                        String templateScreenshotPath,
                                                        String templateImage,
                                                        String resultImage){
    CustomLogger.info("Getting images for comparing");
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    Mat source = Highgui.imread(sourceScreenshotPath + sourceScreenshot, Highgui.CV_LOAD_IMAGE_COLOR);
    Mat template = Highgui.imread(templateScreenshotPath + templateImage);
    Mat outputImage = new Mat();
    int machMethod = Imgproc.TM_CCOEFF;
    CustomLogger.info("Comparing images");
    //Template matching method
    Imgproc.threshold(source, outputImage, TRESH, TRESH_MAX_VALUE, Imgproc.THRESH_TOZERO);
    Imgproc.matchTemplate(source, template, outputImage, machMethod);
    drawRectangleOnResultImage(outputImage,source,template,sourceScreenshotPath,resultImage);
    CustomLogger.info("Comparing points of images");
    Core.MinMaxLocResult mmr = Core.minMaxLoc(outputImage);
    Point matchLoc = mmr.maxLoc;
    String points = (new Point(matchLoc.x + template.cols(),
            matchLoc.y + template.rows())).toString();
    if (points.equals(LOGO_POINTS_FOR_MY_CARDS_SCREEN)){
        CustomLogger.info("The matching is found");
        return true;
    } else {
        CustomLogger.info("There is no matching");
        return false;
    }
}
0 голосов
/ 31 мая 2019

Используйте outputImage, чтобы получить минимальное и максимальное значения. Проверьте, не превышает ли максимальное значение какой-либо желаемый порог. Если максимальное значение не превышает это пороговое значение throw и exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...