1

color1基本的には、2色と2色を混ぜて欲しいですcolor2。単純な計算で blue+yellow = gray ((color1.r + color2.r)/2など) のようなものが発生するので、いくつかの調査を行ったところ、混合色が期待どおりに見えるようにするために明らかに色を混合していることがわかりました (例: blue+yellow = green) そうではありませんまっすぐに。

別のスタックオーバーフローの投稿が教えてくれたのは、2つが混合物を正しく達成するには、L a b *スペース/ CIELABを使用し、このトピックに関するウィキペディアページにリンクする必要があるということでした.

参考になりましたが、RGBを(sRGBよりも)L a b *に変換する方法を本当に理解できませんでした-取得した色を混合する方法と元に戻す方法

ここの誰かが私を助けてくれることを願っています

ありがとう、

サミュエル

4

1 に答える 1

0

1)sRGBをRGBに変換します。GEGLから:

  

static inline double
linear_to_gamma_2_2 (double value)
{
  if (value > 0.0030402477F)
    return 1.055F * pow (value, (1.0F/2.4F)) - 0.055F;
  return 12.92F * value;
}


static inline double
gamma_2_2_to_linear (double value)
{
  if (value > 0.03928F)
    return pow ((value + 0.055F) / 1.055F, 2.4F);
  return value / 12.92F;
}

2)RGBからCIELABへ。OpenCVソース[/src/cv/cvcolor.cpp]を調べます。色空間変換用の関数があります[icvBGRx2Lab_32f_CnC3R]

3)カラーチャンネルをミックスします。

4)すべての色変換を元に戻します。

于 2010-05-09T16:14:51.690 に答える