我需要提取图像的颜色信息,以便以后能够根据颜色的百分比搜索图像。我想为此使用ImageMagick。有任何想法吗?
问问题
1233 次
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 回答