ImageMagick命令到Image :: Magick代码

时间:2014-11-11 14:23:16

标签: perl imagemagick perlmagick

我在某个论坛中找到了以下ImageMagick命令,可以很好地用于比较图像。

convert image1 image2 -compose Difference -composite  -format '%[fx:mean*100]' info:

结果是一个浮点数,低值(如0.5等)意味着:图像相似。

使用附加的图像,它产生数字:0.0419167。 (图像非常相似)

我想使用Image :: Magick(perlmagick)。问题是我不知道如何用perlmagick实现相同的结果。以下工作,并创建composite,(使用附加图像的黑色图像)

#!/usr/bin/env perl
use 5.014;
use strict;
use warnings;
use Data::Dumper;
use Image::Magick;

my $i1 = Image::Magick->new;
$i1->Read('s1.jpg');
my $i2 = Image::Magick->new;
$i2->Read('s2.jpg');

$i1->Composite(image => $i2, compose=>'Difference');
$i1->Display();

问题是,如何将结果转换为数字,例如如何实现

    ... -format '%[fx:mean*100]' info:

PerlMagick中上述命令的一部分,仅用于获取上述"数字"?

有人想要测试,附上两张图片:

enter image description here enter image description here

2 个答案:

答案 0 :(得分:1)

我猜你要打电话

my $format = $iI->Fx( expression=>'mean*100' );

这应该与命令行上的内容完全相同。

有关PerlMagick中fx的详细文档,请参阅here

(页面上有一个示例fx行)

在同一页面上:搜索@statistics。

在我看来,平均值可以通过

访问
my @stats = $i1->Statistics;
my $mean = $stats[3]; # hash would be nice, mean is 4th according to docs
print "$mean\n"; # outputs something like .0413 for me

不确定这是否是你所需要的,但这就是我找到'卑鄙'的方式, 这是否正是fx意味着什么?我不确定,老实说也不愿意理解fx方法的整个文档;)

顺便说一句,我仍然使用的脚本基于Randall Schwartz's post

答案 1 :(得分:0)

刚刚找到答案。

Image::MagickStatistics方法,因此请致电:

my @stat = $i1->Statistics();
say Dumper \@stat

打印每个频道的图像统计信息,例如:

$VAR1 = [
      '8',
      '0',
      '0.168627450980392',
      '0.0418661437908497',    <--- mean RED
      '0.0236850206077085',
      '-0.250788990333716',
      '0.312238727773058',
      '8',
      '0',
      '0.133333333333333',
      '0.0385273202614379',     <- mean GREEN
      '0.0193189321997568',
      '-0.435325792918546',
      '0.0686645009183608',
      '8',
      '0',
      '0.23921568627451',
      '0.0453563725490196',     <- mean BLUE
      '0.0301331898766906',
      '0.309072091600589',
      '0.66336367830764'
    ];

e.g。平均3个数字,得到想要的数字:0.0419166122004357

use List::Util qw(sum)
my $s = sum @stat[3,10,17];
say $s/3;

来自文档:misc methods

  

Statistics()返回每个频道的图像统计信息   图片。返回的值是深度,最小值,最大值,   平均值,标准偏差,峰度,偏度和熵值   RGB,CMYK,RGBA或CMYKA顺序(取决于图像类型)。