我创建了一个录像机,用于将录像存储到文件中。我想实现一个方法,每秒读取一次文件,比较当前文件和旧值(1秒旧),并将差异写入单独的文件。
如果有人能解释如何做或写一个简单的例子,我将非常感激。我想必须有一个线程,通过在给定的时间段内调用自定义方法compareFiles(File currentFile,File oldFile)来比较新值和旧值。旧文件也可以保存为临时文件,原始路径中的当前文件可以与临时文件进行比较。
关于改进所述逻辑的任何建议都非常受欢迎!
答案 0 :(得分:0)
由于具有非完美(物理上不完美)的相机,您将有太多不同的视频文件数据。我怀疑你可以使用一般的DIFF算法进行视频流比较。
答案 1 :(得分:0)
听起来你正在尝试进行运动检测。 基本的想法是从两个帧中提取像素,所以你得到:
int p1[],p2[];
然后,convert将它们变为灰度,然后从另一个中减去一个:
int diff[] = new int[pixels1.length];
for(int i=0;i<pixels1.length;i++) diff[i] = Math.abs(p1[i] - p2[i]);
事实是,由于jpeg压缩等原因,即使没有任何改变,两个后续图像也不会相同。所以你想要寻找大于某个阈值的像素。如果你发现它们就有动作。
如果你的相机正在移动,这种方法将不起作用,因为你们都有所有像素的运动。
答案 2 :(得分:0)
你应该看看http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome如何做这件事。如果你试图做一个简单的“一对一”差异,噪音将是一个很大的问题......