2014-02-13 1 views
1

perlmagick을 사용하여 2 개의 이미지를 비교하려고합니다. 대부분의 경우 완벽하게 작동하지만 픽셀에 약간의 차이가 있으면 오류로 간주됩니다. ImageMagick에서 제공하는 비교 명령을 사용하면 지정된 거리의 픽셀을 동일하게 처리 할 퍼지 매개 변수를 지정할 수 있습니다.비교 API에서 perlmagick과 fuzz 매개 변수 사용

필자는 설명서에 제안 된대로 비교 API에서 fuzz 옵션을 사용했지만 사용하지 못했습니다. http://www.imagemagick.org/script/perl-magick.php

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

감사합니다!

+0

무엇이 잘못 되었습니까? "작동하지 않습니다." –

+0

출력 (이미지의 차이)에 퍼즈 값의 효과가 보이지 않습니다. –

+0

변경 사항이있는 곳의 시각적 신호에 차이 이미지를 사용하고 있으며 '비교'의 출력 이미지를 직접 필요로합니까? –

답변

0

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"; 
} 
+0

0.1로 시도했지만 여전히 작동하지 않습니다. 다양한 조합을 시도했다. –

+0

@NikhilWalvekar 일부 파기 및 명백하게 [PerlMagick의 알려진 문제] (http://www.imagemagick.org/discourse-server/viewtopic.php?f=7&t=13536)를 수행 했습니까? 쉘 유틸리티를 인라인이라고 부를 수 있을까요? –

+0

@NikhilWalvekar CLI 유틸리티를 인라인으로 호출하는 예제를 추가했습니다. –

0

차이 이미지에서 오류 데이터를 추출하여 작동하지 않는 퍼지 문제를 해결할 수 있습니다. 비교 테스트에서 사용한 루틴은 다음과 같습니다. 당신은 이미지 사이에도 작은 차이가 $difference_img에 그려집니다로, 오류의 위치를 ​​표시 할 경우

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'); 
} 

불행하게도,이 방법은 도움이되지 않습니다.