【问题标题】:how to compare two files and extract the difference?如何比较两个文件并提取差异?
【发布时间】:2009-09-22 20:12:20
【问题描述】:

我创建了一个录像机,将录像存储到一个文件中。我想实现一种每秒读取文件的方法,将当前文件与旧值(早 1 秒)进行比较,并将差异写入单独的文件。

如果有人能解释如何做到这一点或写一个简单的例子,我将非常感激。我猜必须有一个线程通过在给定的时间段内调用自定义方法 compareFiles(File currentFile, File oldFile) 将新值与旧值进行比较。也可以将旧文件保存为临时文件,并将原路径的当前文件与临时文件进行比较。

非常欢迎任何有关改进所描述逻辑的建议!

【问题讨论】:

  • 我会尝试使用一些算法来找到要比较的部分的最长公共子序列 (en.wikipedia.org/wiki/Longest_common_subsequence_problem)。那么那些不属于公共子序列的部分显然必须是差异......但是,我不确定这种方法是否最适合您的用例。您想在这里实现什么目标?

标签: java


【解决方案1】:

由于相机不完美(物理上不完美),您将拥有太多不同的视频文件数据。我怀疑您是否可以使用通用 DIFF 算法进行视频流比较。

【讨论】:

    【解决方案2】:

    听起来您正在尝试进行运动检测。 基本思想是从两帧中提取像素,所以你得到:

    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 压缩等原因,即使没有任何变化,两个后续图像也不会相同。所以你想寻找大于某个阈值的像素。如果你找到了它们,你就有了动作。

    如果您的相机正在移动,这种方法将不起作用,因为您的所有像素都有运动。

    【讨论】:

      【解决方案3】:

      您应该看看http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome 是如何做到这一点的。如果您尝试做一个简单的“一对一”差异,噪音将是一个大问题......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-08
        • 1970-01-01
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 2021-08-30
        • 1970-01-01
        相关资源
        最近更新 更多