【问题标题】:Wand/ImageMagick compare method always returns same float numberWand/ImageMagick 比较方法总是返回相同的浮点数
【发布时间】:2021-03-12 20:16:51
【问题描述】:

The documentation for Wand,表示Image.compare 方法返回一个元组,其中包含差异图像和一个表示它们之间差异的整数。

问题是这个数字总是返回一个值为0.6231802821079919的浮点数,即使图像相同!

我只想获得一个值,告诉我一张图片与另一张图片不同的百分比。

这是我的代码。它实际上是在比较 PDF,但将每个页面转换为图像,只需在两个参数中输入相同的 pdf 即可查看它返回 0.6231802821079919

我该怎么处理这个号码?

from wand.image import Image

def get_pdf_difference(control_pdf, test_pdf):
    with Image(filename=control_pdf, format='pdf') as control:
        with Image(filename=test_pdf, format='pdf') as test:
            control.format = 'png'
            test.format = 'png'
            if len(control.sequence) != len(test.sequence):
                raise AttributeError('PDFs are of different length')
            final_diff = 0
            for i, control_page in enumerate(control.sequence):
                test_page = test.sequence[i]
                #Docs gives an example doing this but not changing anything
                #control_page.fuzz = control_page.quantum_range * 0.20
                result_image, result_metric = control_page.compare(test_page)
                final_diff += result_metric
            return final_diff/len(control.sequence)

diff = get_pdf_difference('test.pdf', 'test.pdf')
print(diff)

【问题讨论】:

  • 文档看起来已经过时了。方法应该返回一个 Real 数字作为 result_metric,而不是整数。正如@fmw42 在他的精彩回答中指出的那样,您需要定义要计算的指标。见COMPARE_METRICS

标签: python image-processing imagemagick wand


【解决方案1】:

这是 Python Wand 中的一个简单示例。它将列出 rmse 差异并显示差异以红色突出显示的图像。

输入 1:

输入 2:

from wand.image import Image
from wand.display import display

with Image(filename='img1.jpg') as bimg:
    with Image(filename='img2.jpg') as fimg:
        bimg.fuzz = 0.25*bimg.quantum_range
        bimg.artifacts['compare:highlight-color'] = 'red'
        bimg.artifacts['compare:lowlight-color'] = 'transparent'
        diff_img, diff_val =  bimg.compare(fimg, 'root_mean_square')
        print(diff_val)
        with diff_img:
            diff_img.save(filename='img1_img2_diff.jpg')
            display(diff_img)

RMSE 差异:
0.0238380675979382

差异图像:


现在重复相同的图像 1。

from wand.image import Image
from wand.display import display

with Image(filename='img1.jpg') as bimg:
    with Image(filename='img1.jpg') as fimg:
        bimg.fuzz = 0.25*bimg.quantum_range
        bimg.artifacts['compare:highlight-color'] = 'red'
        bimg.artifacts['compare:lowlight-color'] = 'transparent'
        diff_img, diff_val =  bimg.compare(fimg, 'root_mean_square')
        print(diff_val)
        with diff_img:
            diff_img.save(filename='img1_img2_diff.jpg')
            display(diff_img)

RMSE 差异:

0.0

【讨论】:

  • 谢谢,好像文档已经过时了,就像@emcconville 说的那样,所以 0.02 RMSE 差异意味着图像大约有 2% 的差异?
猜你喜欢
  • 1970-01-01
  • 2016-11-26
  • 2013-01-25
  • 2017-03-13
  • 2018-11-30
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
相关资源
最近更新 更多