我需要提取图像的颜色信息,以便以后能够根据颜色的百分比搜索图像。我想用ImageMagick来做这件事。 有什么想法吗?
答案 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
时,您会看到更少的颜色计数,以及更具代表性的数据。