RGB色丸め関数 – プログラミング – Home

通知
すべてクリア

[解決済] RGB色丸め関数


ぴくしー
 ぴくしー
(@ぴくしー)
ゲスト
結合: 22年前
投稿: 12
Topic starter  

こんにちわ。
ちょっとこのような関数等は標準化されていないか
もしくは、参考に出来る色丸め処理標準論理とうがあればお聞きしたいのですが・・・。

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

よろしくお願いします。
  


引用未解決
トピックタグ
そらぱ
 そらぱ
(@そらぱ)
ゲスト
結合: 22年前
投稿: 14
 

標準化された関数や処理理論は知りませんが、
自分で作るなら、一旦 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
とか...

# 間違ってたらごめんなさい。


返信引用
クルクル
 クルクル
(@クルクル)
ゲスト
結合: 21年前
投稿: 2
 

単純に近い色(値)なら、
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;
}


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

R,G,Bのデータを二値化すればよいのでは

  0~127 は 0
128~255 は 1

として設定する。


返信引用
ぴくしー
 ぴくしー
(@ぴくしー)
ゲスト
結合: 22年前
投稿: 12
Topic starter  

みなさん、回答ありがとうございます。

結局、参考意見をまとめた結果、以下のようにする事にしました。
ありがとうございました。

色の基本色として

RGB / Name
--------------------
FF00FF / magenta
FF0000 / red
FFFF00 / yellow
FFFFFF / white
00FF00 / green
00FFFF / cyan
0000FF / blue
000000 / black

となっているので R、G、B各色がFFor00のどちらに近いか
判断して、場合分けして色を上のものから判断して、番号を付けるようにする


返信引用
ぴくしー
 ぴくしー
(@ぴくしー)
ゲスト
結合: 22年前
投稿: 12
Topic starter  

解決です


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました