在比较api中使用fuzz参数和perlmagick

时间:2014-02-13 10:50:22

标签: perl imagemagick

我正在尝试使用perlmagick来比较2张图片。对于大多数情况,它完全正常,但如果像素略有差异,则将其视为错误。 如果我使用ImageMagick提供的compare命令,那么我可以指定fuzz参数,它将给定距离内的像素视为相同。

我尝试在比较api中使用fuzz选项,如文档中所建议的那样但是它不起作用。 http://www.imagemagick.org/script/perl-magick.php

$Difference = $orgImage->Compare( image => $secondImage, metric => 'RMSE', fuzz => '100', channel => 'ALL' );

谢谢!

2 个答案:

答案 0 :(得分:0)

这是known issue in PerlMagick,自2009年发现以来一直没有修复,似乎Compare()函数内部使用了相等操作而不是比较操作。也许从你的perl脚本中调用CLI实用程序?

use strict;
use warnings;

my $difference = `compare -metric RMSE -fuzz 15% first.png second.png null: 2>&1`;
my $diffAmount = $difference =~ m/\([\d.]*\)/;

if ($diffAmount == 0) {
    print "Yay\n";
}

答案 1 :(得分:0)

您可以通过从差异图像中提取错误数据来解决模糊不能正常工作的问题。这是我在比较测试中使用的例程。

sub cmp_image {
    my ( $result_img, $expect_img, $max_error, $test_name ) = @_;

    my $difference_img = $expect_img->Compare( 
       image => $result_img,
       metric=>'rmse' );

    ok( $difference_img->Get('error') < $max_error, $test_name )
        or diag "Error metric: " . $difference_img->Get('error');
}

不幸的是,如果您想查看错误的位置,这种方法对您没有帮助,因为即使$difference_img中的图像之间的最小差异也会显示。