【问题标题】:ImageMagick command to Image::Magick codeImageMagick 命令到 Image::Magick 代码
【发布时间】:2015-01-08 03:08:15
【问题描述】:

我在某个论坛中找到了以下 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 中上述命令的一部分,用于仅获取上述“数字”?

有人要测试吗,附两张图:

【问题讨论】:

    标签: perl imagemagick perlmagick


    【解决方案1】:

    我猜你想打电话

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

    这应该和你在命令行上做的一样。

    请参阅here 以获取有关 PerlMagick 中 fx 的更详细文档

    (页面上有一个示例 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

    【讨论】:

    • 不幸的是,它在 ImageMagick 图像(不是数字)中返回,可通过$format->Display()...显示。
    • 我隐约记得遇到过类似的问题。我会挖掘代码并回复你
    • 那太好了。 ;) 提前谢谢。 ;)
    • 刚刚找到解决方案。 ;)
    • 是的,我也是。还添加了指向另一个脚本的链接,这通常应该很有用。似乎你的答案更好,只要接受它就可以了,以防有人需要这个
    【解决方案2】:

    刚刚找到答案。

    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'
        ];
    

    例如将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 顺序(取决于图像类型)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2013-03-10
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多