首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在比较api中使用带有perlmagick的fuzz参数

在比较api中使用带有perlmagick的fuzz参数
EN

Stack Overflow用户
提问于 2014-02-13 18:50:22
回答 2查看 315关注 0票数 1

我正在尝试使用perlmagick来比较两个图像。它在大多数情况下都工作得很好,但是如果像素有细微的差异,那么它就会被算作错误。如果我使用ImageMagick提供的比较命令,那么我可以指定fuzz参数,该参数会将给定距离中的像素视为相同的。

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

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

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-02-13 19:10:19

这是一个自2009年发现以来一直未修复的known issue in PerlMagick,看起来Compare()函数内部使用的是相等运算而不是比较运算。也许可以在perl脚本中调用CLI实用程序?

代码语言:javascript
复制
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";
}
票数 0
EN

Stack Overflow用户

发布于 2014-02-13 19:51:54

您可以通过从差异图像中提取错误数据来解决模糊不起作用的问题。下面是我在比较测试中使用的一个例程。

代码语言:javascript
复制
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中绘制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21752036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档