3

我需要提取图像的颜色信息,以便以后能够根据颜色的百分比搜索图像。我想为此使用ImageMagick。有任何想法吗?

4

1 回答 1

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您会看到更少颜色的更多计数,以及更具代表性的数据。

于 2012-08-28T14:28:06.540 回答