Warm tip: This article is reproduced from serverfault.com, please click

python-Wand / ImageMagick比较方法始终返回相同的浮点数

(python - Wand/ImageMagick compare method always returns same float number)

发布于 2020-11-30 21:38:10

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)
Questioner
Mojimi
Viewed
0
fmw42 2020-12-01 07:07:07

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

输入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