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 に答える