как сравнить два файла и извлечь разницу? - PullRequest
0 голосов
/ 22 сентября 2009

Я создал видеомагнитофон, который сохраняет записи в файл. Я хотел бы реализовать метод, который будет читать файл каждую секунду, сравнивать текущий файл со старым значением (на 1 секунду старше) и записывать разницу в отдельный файл.

Я был бы очень благодарен, если бы кто-нибудь мог объяснить, как это сделать, или написать простой пример. Я предполагаю, что должен быть поток, который сравнивает новое значение со старым, вызывая пользовательский метод compareFiles (File currentFile, File oldFile) в течение определенного периода времени. Старый файл также можно сохранить как временный файл, а текущий файл по первоначальному пути можно сравнить с временным файлом.

Любые предложения по улучшению описанной логики приветствуются!

Ответы [ 3 ]

0 голосов
/ 22 сентября 2009

звучит так, будто вы пытаетесь обнаружить движение. Основная идея состоит в том, чтобы извлечь пиксели из двух кадров, так что вы получите:

int p1[],p2[];

затем преобразуйте их в оттенки серого, а затем вычтите одно из другого:

int diff[] = new int[pixels1.length];
for(int i=0;i<pixels1.length;i++) diff[i] = Math.abs(p1[i] - p2[i]);

Дело в том, что из-за сжатия в формате JPEG и т. Д. Два последующих изображения не будут идентичны, даже если ничего не изменилось. поэтому вы хотите искать пиксели, превышающие некоторый порог. если вы нашли их, у вас есть движение.

этот подход не будет работать, если ваша камера движется, потому что тогда у всех вас есть движение во всех пикселях.

0 голосов
/ 22 сентября 2009

Вы должны взглянуть на то, как http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome делает это. Шум будет БОЛЬШОЙ проблемой, если вы попытаетесь сделать простой "один-к-другому" diff ...

0 голосов
/ 22 сентября 2009

У вас будет слишком много разных данных для видеофайла из-за несовершенной (физически несовершенной) камеры. Я сомневаюсь, что вы можете использовать общие алгоритмы DIFF для сравнения видеопотоков.

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