如何轻松提取图像颜色的百分比?

时间:2012-08-28 13:54:47

标签: perl colors imagemagick extraction

我需要提取图像的颜色信息,以便以后能够根据颜色的百分比搜索图像。我想用ImageMagick来做这件事。 有什么想法吗?

1 个答案:

答案 0 :(得分:7)

ImageMagick有一个Histogram方法,可以返回图像中的颜色列表以及它们出现的频率。它的文档记录很差,并且界面很糟糕,但我过去使用过它,所以我提供了一些有用的代码:

my @hist_data = $image->Histogram;
my @hist_entries;
# Histogram returns data as a single list, but the list is actually groups of
# 5 elements. Turn it into a list of useful hashes.
while (@hist_data) {
    my ($r, $g, $b, $a, $count) = splice @hist_data, 0, 5;
    push @hist_entries, {
        r => $r,
        g => $g,
        b => $b,
        alpha => $a,
        count => $count,
    };
}
# Sort the colors in decreasing order
@hist_entries = sort { $b->{count} <=> $a->{count} } @hist_entries;

然而,根据你想要做的事情,直方图并不像全彩色图像那样有用,因为相同颜色的色调会有很多不同的颜色,它们在直方图中。一个有用的预处理步骤是在图像的克隆上调用$image->Segment(colorspace => 'rgb'),它找到相似颜色的区域并用其平均颜色替换整个区域。然后,当您致电Histogram时,您会看到更少的颜色计数,以及更具代表性的数据。