背景:我有需要比较差异的图像。这些图像很大(大约 1400x9000 像素)、机器生成且高度受限(特定线性 UI 的屏幕截图),并且预计几乎相同,不同之处是以下三种可能性之一:
- 图 1 有一个部分 图 2 缺失
- 图像 1 缺少部分图像 2
- 两张图片都有给定的部分,但其内容不同
我正在尝试构建一个工具来突出人类审阅者的差异,本质上是面向行的差异的图像版本。为此,我试图逐行扫描图像并比较它们以确定这些行是否相同。我的最终目标是一个实际的类似差异的输出,它可以检测到部分丢失/添加/不同,并尽快将相同内容的其余部分同步图像,但对于第一次剪辑,我是采用更简单的方法,其中两个图像重叠(alpha 混合),不同的线条用特定颜色突出显示(即 alpha 与第三行纯色混合)。起初我尝试使用 Python Imaging Library,但这太慢了几个数量级,所以我决定尝试使用vips
,这应该更快。vips
但是,我完全不知道如何在使用操作后表达我的意思。更简单版本的伪代码本质上是:
out = []
# image1 and image2 are expected, but not guaranteed to have the same height
# they are likely to have different heights if different
# most lines are entirely white pixels
for line1, line2 in zip(image1, image2):
if line1 == line2:
out.append(line1)
else:
# ALL_RED is a line composed of solid red pixels
out.append(line1.blend(line2, 0.5).blend(ALL_RED, 0.5))
我pyvips
在我的项目中使用,但我也对使用普通vips
或任何其他绑定的代码感兴趣,因为这些操作是共享的,并且很容易跨方言翻译。
编辑 2:缺少/添加/更改部分的全尺寸图像: