2

色オブジェクトを使用して似たような色のピクセルを見つけるにはどうすればよいですか? 2つの色が等しいかどうかを確認するために使用できることを知っています:

a.equals(b);

ここで、a と b は色のオブジェクトですが、たとえば青色の同様の色合いを見つけたい場合はどうすればよいでしょうか?

4

3 に答える 3

4

色の比較は簡単な問題ではなく、さまざまなメトリックがあります。それを行うライブラリを(簡単に)見つけることができませんが、徹底的に検索すれば、そこに何かがあると確信しています。 このクラスを見てください。その間に、いくつかの読書をしてください!

于 2011-02-21T13:26:52.437 に答える
4

プログラムで色の値を微調整する場合、多くのオプションがあります。非常に簡単な解決策は、カラー オブジェクトのチャネル値をランダムにオフセットすることです。これを変化する色と考えてください。変化させたい色を取り、そこからさらにいくつかの色を生成します。

Color mutateColor(int range){
  int r = a.getRed() + (int)(Math.random() * 2 * range - range);
  r = Math.min(255, Math.max(0, r));

  int g = a.getGreen() + (int)(Math.random() * 2 * range - range);
  g = Math.min(255, Math.max(0, g));

  int b = a.getBlue() + (int)(Math.random() * 2 * range - range);
  b = Math.min(255, Math.max(0, b));

  return new Color(r, g, b);
}

これは最も単純な例です。範囲が指定され、各チャネルが同じ範囲だけオフセットされ、次のようになります。

いくつかのランダムに色付けされたボックス

これは範囲値 10 で行われました。制御を追加するために、mutateColor 関数に 3 つの引数を追加できます (個々のチャネルごとのオフセット)。1 つの範囲を取得して、チャネルに既にある値に基づいて変更することもできます。例えば:

range = 0.25
red = 100
green = 10
blue = 0

redRange = 100 + rand(-25, 25)
greenRange = 10 + rand(-2.5, 2.5);
etc...

これは、他の多くの可能性のうちの 1 つにすぎません。

許容範囲で 2 つの色を比較しようとしている場合は、コードを fredley のリンクから移植しました。2 つの色の違いを取得するのにうまく機能します。

double colorDist(Color e1, Color e2){
  long rmean = ( (long)e1.getRed() + (long)e2.getRed() ) / 2;
  long r = (long)e1.getRed() - (long)e2.getRed();
  long g = (long)e1.getGreen() - (long)e2.getGreen();
  long b = (long)e1.getBlue() - (long)e2.getBlue();
  return Math.sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}
于 2011-02-21T17:18:35.060 に答える
1

たとえば、似たような青の色合いを見つけたい場合はどうすればよいでしょうか?

これの技術的な定義が何を意味するのか、私にはわかりません。ただし、 HSL Colorを使用して独自の定義を作成できる場合があります。

基本的に、各色の色相が +/- 固定度数であることを確認することから始めることができると思います。次に、彩度や明度が目的の範囲内にあるかどうかを確認して、さらに絞り込むことができます。

于 2011-02-21T16:35:54.733 に答える