こんにちわ。
ちょっとこのような関数等は標準化されていないか
もしくは、参考に出来る色丸め処理標準論理とうがあればお聞きしたいのですが・・・。
RGB色(256,256,256)の値を
1:BLACK
2:Red
3:Green
4:Blue
5:Yellow
6:Magenta
7:Cyan
8:White
のようにRGB、CMY色の近い色に丸めたいのですが・・・。
例)
(R、G、B)=(255,85,0) ===>> 2:Red
よろしくお願いします。
標準化された関数や処理理論は知りませんが、
自分で作るなら、一旦 HSV や HLS に変換して
判定すると思います。
例えば、こんな手順かな?
(1) RGB(またはCMY)を HSV に変換
(2) V 値がある値以下なら Black
(3) S 値がある値以下なら White
(4) その他なら、H 値で6色を判定
色変換は検索すれば簡単に見つかります。
あまり複雑ではありませんよ。
http://www.cvl.iis.u-tokyo.ac.jp/~miyazaki/program/tech01.html
とか...
# 間違ってたらごめんなさい。
単純に近い色(値)なら、
RGBの入った配列の最も差の小さいものを選べば良いんではないでしょうか。
...
int r = GetRValue(Color);
int g = GetGValue(Color);
int b = GetBValue(Color);
...
diff = abs(r - GetRValue(RGBColors[i]))
+ abs(g - GetGValue(RGBColors[i]))
+ abs(b - GetBValue(RGBColors[i]));
if (diff < nearclr_diff) {
nearclr_idx = i;
nearclr_diff = diff;
}
R,G,Bのデータを二値化すればよいのでは
0~127 は 0
128~255 は 1
として設定する。
みなさん、回答ありがとうございます。
結局、参考意見をまとめた結果、以下のようにする事にしました。
ありがとうございました。
色の基本色として
RGB / Name
--------------------
FF00FF / magenta
FF0000 / red
FFFF00 / yellow
FFFFFF / white
00FF00 / green
00FFFF / cyan
0000FF / blue
000000 / black
となっているので R、G、B各色がFFor00のどちらに近いか
判断して、場合分けして色を上のものから判断して、番号を付けるようにする
解決です