Нужно сравнить изображения

212
12 апреля 2018, 13:29

Нужно сравнить два изображения (.jpg), чуть позже, возможно, ещё и видео. написал функцию:

void unique(List<Photo> &list)
{
string subject_name, object_name;
size_t i = 0;
while (list.Get_Size())
{
    subject_name = list[i].Get_data(LOCATION) + list[i].Get_data(NAME);
    ifstream subject(subject_name, ios::binary | ios::ate);
    size_t subject_size = subject.tellg();
    subject.seekg(0, ios::beg);
    char *subject_buf = new char[subject_size];
    subject.read(subject_buf, subject_size);
    subject.close();
    for (size_t j = i + 1; j < list.Get_Size(); j++)
    {
        object_name = list[j].Get_data(LOCATION) + list[j].Get_data(NAME);
        ifstream object(subject_name, ios::binary | ios::ate);
        size_t object_size = object.tellg();
        if (subject_size != object_size)
        {
            object.close();
            break;
        }
        object.seekg(0, ios::beg);
        char *object_buf = new char[object_size];
        object.read(object_buf, object_size);
        object.close();
        for (size_t k = 0; k < subject_size; k++)
        {
            if (subject_buf[k] != object_buf[k])
                break;
            if (k == subject_size)
            {
                list.removeAt(j);
                delete[] object_buf;
                delete[] subject_buf;
                unique(list);
                return;
            }
        }
        delete[] object_buf;
    }
    i++;
    delete[] subject_buf;
    if (i > list.Get_Size() - 1)
        return;
}
}

Сравниваю файлы побитого, если ничего не напутал. Файлы открываю в бинарном режиме и в режиме чтения. Первым делом проверяю, не равны ли размеры. Затем, поочерёдно сравниваю в цикле for каждый символ: если встречаются разные, выхожу из текущего цикла и сравниваю следующий файл, если все были одинаковые и дошли до последнего - делаю вывод, что это копия фотографии и, следовательно, удаляю.

как только происходит удаление, рекурсивно вхожу в эту же функцию.

Сам я ошибки в алгоритме не вижу, может, знатоки подскажут?

P.S. Не уверен, что нужны рекурсия и такое сравнение посимвольное, но добавил их в отчаянных попытках заставить э_т_о работать.

P.P.S. Есть предположение, что при таком подходе, учитывается имя файла, а они, конечно, разные. Если так, подскажите как просто сравнить фотографии.

P.P.P.S. Про сравнения фоток на форуме читал, но мне не надо выделять объекты, сравнивать цвет штор, количество кресел и наличие инопланетян. Я просто хочу узнать являются ли два файла копией. Будь там даже один иной пиксель - для меня они уже разные.

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

READ ALSO
Найти слово из файла, в котором встретится больше всего букв из слова, введённого с клавиатуры

Найти слово из файла, в котором встретится больше всего букв из слова, введённого с клавиатуры

Имеется файл, в нём написаны словаС клавиатуры вводится слово с неповторяющимися буквами

285
Найти НОК для всех чисел из файла

Найти НОК для всех чисел из файла

Есть файл, в нём написаны числаНужно найти и вывести на экран самое маленькое число, которое делится на все числа из файла, тобишь наименьшее...

241
Медленный цикл с векторами в С++

Медленный цикл с векторами в С++

Здравствуйте , есть такой код :

220
Не удаётся открыть источник файла [требует правки]

Не удаётся открыть источник файла [требует правки]

Если открываю готовый проект - не работают стандартные библиотеки

311