我正在尝试使用perlmagick来比较两个图像。它在大多数情况下都工作得很好,但是如果像素有细微的差异,那么它就会被算作错误。如果我使用ImageMagick提供的比较命令,那么我可以指定fuzz参数,该参数会将给定距离中的像素视为相同的。
我试着按照文档中的建议在比较api中使用fuzz选项,但它不起作用。http://www.imagemagick.org/script/perl-magick.php
$Difference = $orgImage->Compare( image => $secondImage, metric => 'RMSE', fuzz => '100', channel => 'ALL' );
谢谢!
发布于 2014-02-13 19:10:19
这是一个自2009年发现以来一直未修复的known issue in PerlMagick,看起来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";
}发布于 2014-02-13 19:51:54
您可以通过从差异图像中提取错误数据来解决模糊不起作用的问题。下面是我在比较测试中使用的一个例程。
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中绘制。
https://stackoverflow.com/questions/21752036
复制相似问题