сравните 2 изображения, чтобы избежать дублирования

Я сравниваю 2 похожих изображения и хотел бы увидеть, похожи ли они оба. В настоящее время я использовал код:

public void foo(Bitmap bitmapFoo) {
    int[] pixels;

    int height = bitmapFoo.getHeight();
    int width = bitmapFoo.getWidth();

    pixels = new int[height * width];

    bitmapFoo.getPixels(pixels, 0, width, 1, 1, width - 1, height - 1); 


}

и вызываю функцию: foo(img1) где:

img1=(Bitmap)data.getExtras().get("data");

Я хотел бы знать, как получить указанный выше getpixel, я попытался назначить его переменной, но не сработал. Должен ли он иметь тип возврата ?? а по формату он есть?

А также как сравнить 2 изображения ??

Также оба изображения могут иметь разные размеры в зависимости от мобильной камеры, с которой сделан снимок.

Также может ли он распознать, если одно и то же изображение снято утром и ночью ???

Заранее спасибо.


person Jason Wood    schedule 21.08.2013    source источник
comment
Проверьте этот пост, где они предложили несколько вариантов: stackoverflow.com / questions / 6120439 /   -  person Juangcg    schedule 22.08.2013
comment
как мне получить это: bitmapFoo.getPixels (пикселей, 0, ширина, 1, 1, ширина - 1, высота - 1);   -  person Jason Wood    schedule 22.08.2013


Ответы (2)


Если вы хотите скопировать пиксели растрового изображения в массив байтов, самый простой способ:

int height = bitmapFoo.getHeight();
int width = bitmapFoo.getWidth();

pixels = new int[height * width];

bitmapFoo.copyPixelsToBuffer(pixels);

См. документацию

Я должен предупредить вас, что вы должны будете обращаться с этим осторожно, иначе вы получите OutOfMemoryError.

Чтобы получить все пиксели

bitmapFoo.copyPixelsToBuffer(pixels);

or

bitmapFoo.getPixels(pixels, 0, width, 0, 0, width, height);

Чтобы получить One Pixel

Два аргумента должны быть двумя целыми числами в диапазоне [0, getWidth () - 1] и [0, getHeight () - 1].

int pix = bitmapFoo.getPixel(x, y);
person Juangcg    schedule 21.08.2013
comment
но там уже есть функция getpixel: bitmapFoo.getPixels (пикселей, 0, ширина, 1, 1, ширина - 1, высота - 1); Как это получить ?? - person Jason Wood; 22.08.2013
comment
bitmapFoo.getPixels (пикселей, 0, ширина, 0, 0, ширина, высота); - person Juangcg; 22.08.2013
comment
int pxl = bitmapFoo.getPixel (bitmapFoo.getHeight (), bitmapFoo.getWidth ()); это ошибка. Почему? Спасибо за уделенное время. - person Jason Wood; 22.08.2013
comment
Проверьте ответ еще раз, но вы получаете сообщение об ошибке, потому что вы используете индекс из растрового изображения. - person Juangcg; 22.08.2013
comment
Еще раз извините. У меня есть 3 вопроса по вышеуказанной теме. 1. bitmapFoo.getPixels (пикселей, 0, ширина, 0, 0, ширина, высота); как получить значение для вышеуказанного оператора в переменной? или массив? или возвращаемый тип, или просто сравните 2 растровых изображения. в основном я ищу образец кода или проект, который работает ›Я работаю над ним несколько часов. Не могу решить - person Jason Wood; 22.08.2013
comment
какое значение должно быть для высоты, ширины в eq: bitmapFoo.getHeight (), bitmapFoo.getWidth () ?? h = 800 w = 480 - person Jason Wood; 22.08.2013
comment
когда вы вызываете этот метод bitmapFoo.getPixels (пикселей, 0, ширина, 0, 0, ширина, высота);, пиксели bitmapFoo копируются в пиксели массива. - person Juangcg; 22.08.2013
comment
3. Я использовал equals, как предложено в ссылке, но как мне это называть? Я пробовал Arrays ar = equals (img1, img2); но я получаю сообщение об ошибке. Еще раз спасибо за то, что разобрались. - person Jason Wood; 22.08.2013
comment
О, в int [] пикселей ?? потому что я думал, что это ч * ш ?? раньше правильно? - person Jason Wood; 22.08.2013
comment
Я видел это, но как мне использовать его в IF Condition. Еще раз спасибо за вашу поддержку - person Jason Wood; 22.08.2013
comment
Вы должны знать, как использовать его в IF Condition. Надеюсь, я помог тебе. До свидания. - person Juangcg; 22.08.2013
comment
Подскажите, пожалуйста, как ?? - person Jason Wood; 22.08.2013

Этот код будет сравнивать пиксель базового изображения с другим изображением.

  1. Если оба пикселя в местоположении (x, y) совпадают, добавьте тот же пиксель в изображение результата без изменений. В противном случае он изменяет этот пиксель и добавляет к нашему результирующему изображению.

  2. В случае, если высота или ширина базового изображения больше, чем у другого изображения, он добавит красный цвет для дополнительного пикселя, который недоступен в других изображениях.

  3. Оба формата файлов изображений должны быть одинаковыми для сравнения.

  4. Код будет использовать формат файла базового изображения для создания файла результирующего изображения, и результирующее изображение будет содержать выделенную часть, где наблюдается различие.

Вот Ссылка на код с прилагаемым образцом примера.

person Neeraj Vishwakarma    schedule 25.07.2019