Сравнение двух картинок

105
25 января 2020, 17:10

подскажите, пожалуйста, в чем проблема. Нахожу ORB дискрипторы двух картинок, а потом сравниваю их расстояния. Но моя программа работает не правильно .

    private static Mat countImage(String path) {
        Mat img1 = Imgcodecs.imread(path, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
        ORB orb = ORB.create();
        MatOfKeyPoint keypoints = new MatOfKeyPoint();
        Mat descriptors = new Mat();
        orb.detectAndCompute(img1, new Mat(), keypoints, descriptors);
        return descriptors;
    }
    private static void compareImages(String path1, String path2) {
        System.out.println(path1 + "-" + path2);
        Mat descriptors1 = countImage(path1);
        Mat descriptors2 = countImage(path2);
        DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
        MatOfDMatch matches = new MatOfDMatch();
        matcher.match(descriptors1, descriptors2, matches);
        List<DMatch> matchesList = matches.toList();
        Double max_dist = 0.0;
        Double min_dist = 100.0;
        for (DMatch dMatch : matchesList) {
            Double dist = (double) dMatch.distance;
            if (dist < min_dist)
                min_dist = dist;
            if (dist > max_dist)
                max_dist = dist;
        }
        List<DMatch> good_matches = new ArrayList<>();
        for (DMatch aMatchesList : matchesList) {
            if (aMatchesList.distance <= (1.5 * min_dist))
                good_matches.add(aMatchesList);
        }
        good_matches.forEach(System.out::println);
    }

    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        compareImages("C:\\image\\5.jpg", "C:\\image\\6.jpg");
    }
}

Результат (картинки практические одинаковые, отличается только немного цветом):

DMatch [queryIdx=7, trainIdx=467, imgIdx=0, distance=64.0]
DMatch [queryIdx=9, trainIdx=281, imgIdx=0, distance=63.0]
DMatch [queryIdx=10, trainIdx=146, imgIdx=0, distance=64.0]
DMatch [queryIdx=21, trainIdx=487, imgIdx=0, distance=51.0]
DMatch [queryIdx=22, trainIdx=160, imgIdx=0, distance=55.0]
DMatch [queryIdx=24, trainIdx=114, imgIdx=0, distance=66.0]
DMatch [queryIdx=32, trainIdx=105, imgIdx=0, distance=64.0]
DMatch [queryIdx=33, trainIdx=348, imgIdx=0, distance=65.0]
DMatch [queryIdx=36, trainIdx=57, imgIdx=0, distance=66.0]
DMatch [queryIdx=46, trainIdx=433, imgIdx=0, distance=66.0]
DMatch [queryIdx=51, trainIdx=66, imgIdx=0, distance=65.0]
DMatch [queryIdx=59, trainIdx=96, imgIdx=0, distance=60.0]
DMatch [queryIdx=79, trainIdx=100, imgIdx=0, distance=64.0]
DMatch [queryIdx=80, trainIdx=97, imgIdx=0, distance=66.0]
DMatch [queryIdx=84, trainIdx=480, imgIdx=0, distance=65.0]
DMatch [queryIdx=87, trainIdx=146, imgIdx=0, distance=59.0]
DMatch [queryIdx=90, trainIdx=438, imgIdx=0, distance=62.0]
DMatch [queryIdx=111, trainIdx=455, imgIdx=0, distance=65.0]
DMatch [queryIdx=134, trainIdx=480, imgIdx=0, distance=59.0]
DMatch [queryIdx=142, trainIdx=197, imgIdx=0, distance=66.0]
DMatch [queryIdx=148, trainIdx=469, imgIdx=0, distance=59.0]
DMatch [queryIdx=151, trainIdx=266, imgIdx=0, distance=63.0]
DMatch [queryIdx=162, trainIdx=34, imgIdx=0, distance=64.0]
DMatch [queryIdx=171, trainIdx=51, imgIdx=0, distance=65.0]
DMatch [queryIdx=179, trainIdx=495, imgIdx=0, distance=64.0]
DMatch [queryIdx=180, trainIdx=125, imgIdx=0, distance=60.0]
DMatch [queryIdx=184, trainIdx=105, imgIdx=0, distance=64.0]
DMatch [queryIdx=196, trainIdx=133, imgIdx=0, distance=60.0]
DMatch [queryIdx=202, trainIdx=3, imgIdx=0, distance=66.0]
DMatch [queryIdx=214, trainIdx=488, imgIdx=0, distance=66.0]
DMatch [queryIdx=215, trainIdx=482, imgIdx=0, distance=54.0]
DMatch [queryIdx=228, trainIdx=82, imgIdx=0, distance=65.0]
DMatch [queryIdx=230, trainIdx=133, imgIdx=0, distance=62.0]
DMatch [queryIdx=233, trainIdx=25, imgIdx=0, distance=63.0]
DMatch [queryIdx=235, trainIdx=488, imgIdx=0, distance=58.0]
DMatch [queryIdx=245, trainIdx=4, imgIdx=0, distance=61.0]
DMatch [queryIdx=256, trainIdx=182, imgIdx=0, distance=65.0]
DMatch [queryIdx=261, trainIdx=91, imgIdx=0, distance=64.0]
DMatch [queryIdx=263, trainIdx=206, imgIdx=0, distance=64.0]
DMatch [queryIdx=269, trainIdx=62, imgIdx=0, distance=63.0]
DMatch [queryIdx=271, trainIdx=184, imgIdx=0, distance=61.0]
DMatch [queryIdx=279, trainIdx=51, imgIdx=0, distance=44.0]
DMatch [queryIdx=282, trainIdx=3, imgIdx=0, distance=57.0]
DMatch [queryIdx=284, trainIdx=48, imgIdx=0, distance=49.0]
DMatch [queryIdx=288, trainIdx=237, imgIdx=0, distance=65.0]
DMatch [queryIdx=290, trainIdx=241, imgIdx=0, distance=61.0]
DMatch [queryIdx=302, trainIdx=480, imgIdx=0, distance=59.0]
DMatch [queryIdx=305, trainIdx=472, imgIdx=0, distance=61.0]
DMatch [queryIdx=313, trainIdx=485, imgIdx=0, distance=61.0]
DMatch [queryIdx=319, trainIdx=180, imgIdx=0, distance=64.0]
DMatch [queryIdx=322, trainIdx=8, imgIdx=0, distance=60.0]
DMatch [queryIdx=325, trainIdx=87, imgIdx=0, distance=66.0]
DMatch [queryIdx=326, trainIdx=188, imgIdx=0, distance=58.0]
DMatch [queryIdx=329, trainIdx=124, imgIdx=0, distance=54.0]
DMatch [queryIdx=330, trainIdx=15, imgIdx=0, distance=66.0]
DMatch [queryIdx=332, trainIdx=234, imgIdx=0, distance=65.0]
DMatch [queryIdx=336, trainIdx=19, imgIdx=0, distance=60.0]
DMatch [queryIdx=339, trainIdx=480, imgIdx=0, distance=53.0]
DMatch [queryIdx=343, trainIdx=158, imgIdx=0, distance=66.0]
DMatch [queryIdx=345, trainIdx=353, imgIdx=0, distance=55.0]
DMatch [queryIdx=346, trainIdx=480, imgIdx=0, distance=63.0]
DMatch [queryIdx=347, trainIdx=51, imgIdx=0, distance=59.0]
DMatch [queryIdx=348, trainIdx=151, imgIdx=0, distance=66.0]
DMatch [queryIdx=351, trainIdx=472, imgIdx=0, distance=62.0]
DMatch [queryIdx=352, trainIdx=99, imgIdx=0, distance=62.0]
DMatch [queryIdx=353, trainIdx=253, imgIdx=0, distance=54.0]
DMatch [queryIdx=359, trainIdx=480, imgIdx=0, distance=61.0]
DMatch [queryIdx=360, trainIdx=91, imgIdx=0, distance=65.0]
DMatch [queryIdx=361, trainIdx=495, imgIdx=0, distance=57.0]
DMatch [queryIdx=362, trainIdx=192, imgIdx=0, distance=64.0]
DMatch [queryIdx=364, trainIdx=254, imgIdx=0, distance=66.0]
DMatch [queryIdx=366, trainIdx=229, imgIdx=0, distance=65.0]
DMatch [queryIdx=371, trainIdx=24, imgIdx=0, distance=59.0]
DMatch [queryIdx=372, trainIdx=455, imgIdx=0, distance=64.0]
DMatch [queryIdx=376, trainIdx=130, imgIdx=0, distance=61.0]
DMatch [queryIdx=383, trainIdx=99, imgIdx=0, distance=66.0]
DMatch [queryIdx=388, trainIdx=24, imgIdx=0, distance=64.0]
DMatch [queryIdx=389, trainIdx=100, imgIdx=0, distance=59.0]
DMatch [queryIdx=391, trainIdx=140, imgIdx=0, distance=65.0]
DMatch [queryIdx=392, trainIdx=99, imgIdx=0, distance=65.0]
DMatch [queryIdx=394, trainIdx=3, imgIdx=0, distance=60.0]
DMatch [queryIdx=397, trainIdx=487, imgIdx=0, distance=62.0]
DMatch [queryIdx=399, trainIdx=30, imgIdx=0, distance=64.0]
DMatch [queryIdx=400, trainIdx=486, imgIdx=0, distance=62.0]
DMatch [queryIdx=401, trainIdx=253, imgIdx=0, distance=65.0]
DMatch [queryIdx=402, trainIdx=428, imgIdx=0, distance=64.0]
DMatch [queryIdx=403, trainIdx=171, imgIdx=0, distance=59.0]
DMatch [queryIdx=404, trainIdx=499, imgIdx=0, distance=61.0]
DMatch [queryIdx=405, trainIdx=120, imgIdx=0, distance=55.0]
DMatch [queryIdx=406, trainIdx=171, imgIdx=0, distance=63.0]
DMatch [queryIdx=407, trainIdx=455, imgIdx=0, distance=61.0]
DMatch [queryIdx=408, trainIdx=100, imgIdx=0, distance=56.0]
DMatch [queryIdx=409, trainIdx=171, imgIdx=0, distance=64.0]
DMatch [queryIdx=413, trainIdx=204, imgIdx=0, distance=58.0]
DMatch [queryIdx=414, trainIdx=36, imgIdx=0, distance=66.0]
DMatch [queryIdx=415, trainIdx=118, imgIdx=0, distance=62.0]
DMatch [queryIdx=422, trainIdx=133, imgIdx=0, distance=62.0]
DMatch [queryIdx=423, trainIdx=486, imgIdx=0, distance=60.0]
DMatch [queryIdx=425, trainIdx=102, imgIdx=0, distance=65.0]
DMatch [queryIdx=429, trainIdx=485, imgIdx=0, distance=66.0]
DMatch [queryIdx=431, trainIdx=401, imgIdx=0, distance=59.0]
DMatch [queryIdx=432, trainIdx=12, imgIdx=0, distance=57.0]
DMatch [queryIdx=433, trainIdx=102, imgIdx=0, distance=59.0]
DMatch [queryIdx=434, trainIdx=12, imgIdx=0, distance=60.0]
DMatch [queryIdx=435, trainIdx=176, imgIdx=0, distance=63.0]
DMatch [queryIdx=437, trainIdx=36, imgIdx=0, distance=59.0]
DMatch [queryIdx=438, trainIdx=374, imgIdx=0, distance=63.0]
DMatch [queryIdx=439, trainIdx=100, imgIdx=0, distance=65.0]
DMatch [queryIdx=440, trainIdx=53, imgIdx=0, distance=53.0]
DMatch [queryIdx=442, trainIdx=14, imgIdx=0, distance=48.0]
DMatch [queryIdx=443, trainIdx=8, imgIdx=0, distance=66.0]
DMatch [queryIdx=444, trainIdx=160, imgIdx=0, distance=50.0]
DMatch [queryIdx=446, trainIdx=200, imgIdx=0, distance=55.0]
DMatch [queryIdx=447, trainIdx=364, imgIdx=0, distance=59.0]
DMatch [queryIdx=450, trainIdx=78, imgIdx=0, distance=62.0]
DMatch [queryIdx=452, trainIdx=3, imgIdx=0, distance=65.0]
DMatch [queryIdx=454, trainIdx=30, imgIdx=0, distance=62.0]
DMatch [queryIdx=457, trainIdx=279, imgIdx=0, distance=59.0]
DMatch [queryIdx=458, trainIdx=387, imgIdx=0, distance=63.0]
DMatch [queryIdx=459, trainIdx=12, imgIdx=0, distance=58.0]
DMatch [queryIdx=463, trainIdx=480, imgIdx=0, distance=65.0]
DMatch [queryIdx=467, trainIdx=14, imgIdx=0, distance=59.0]
DMatch [queryIdx=471, trainIdx=374, imgIdx=0, distance=57.0]
DMatch [queryIdx=472, trainIdx=8, imgIdx=0, distance=63.0]
DMatch [queryIdx=473, trainIdx=113, imgIdx=0, distance=61.0]
DMatch [queryIdx=474, trainIdx=285, imgIdx=0, distance=57.0]
DMatch [queryIdx=476, trainIdx=499, imgIdx=0, distance=62.0]
DMatch [queryIdx=479, trainIdx=14, imgIdx=0, distance=61.0]
DMatch [queryIdx=480, trainIdx=100, imgIdx=0, distance=52.0]
DMatch [queryIdx=485, trainIdx=56, imgIdx=0, distance=66.0]
DMatch [queryIdx=487, trainIdx=14, imgIdx=0, distance=58.0]
DMatch [queryIdx=492, trainIdx=185, imgIdx=0, distance=64.0]
DMatch [queryIdx=496, trainIdx=140, imgIdx=0, distance=66.0]
DMatch [queryIdx=498, trainIdx=151, imgIdx=0, distance=49.0]

Картинки:

READ ALSO
Отправка push-уведомлений

Отправка push-уведомлений

Я пытаюсь создать небольшое приложение, которое будет считывать загрузку ЦП компьютеров / ноутбуков и отправлять push-уведомление в браузер...

138
Request method &#39;POST&#39; not supported в Spring MVC

Request method 'POST' not supported в Spring MVC

Помогите пожалуйста решить проблему

121
Java чтение и запись в файл

Java чтение и запись в файл

При написание программы по распознаванию рукописного текста :

137
Мониторинг хоста

Мониторинг хоста

Пожалуйста подскажите! Как можно реализовать в приложении для Android пинг какого либо url и вывести информацию о его состоянииНапример:пишем...

153