投稿者 tel | 2010年9月6日

画像処理プログラミング – 色変換、色領域抽出

そろそろ実用的な画像処理プログラムを。

画像データはRGBの形式で取り扱っているが、人間が見たときにわかりやすい色形式に変換する。とりあえずHSV形式。

/*
 * RGB -> HSV
 * h: 色相(0 - 359)
 * s: 彩度(0 - 255)
 * v: 明度(0 - 255)
 */
template <typename T>
int RGBToHSV(unsigned char r, unsigned char g, unsigned char b,
                    T &h, T &s, T &v)
{
  int max;
  int min;
  int tmp;

  h = s = v = 0;

  // 最大値・最小値計算
  if(r > g) {
    if(b > r) {
      max = b;
      min = g;
    } else {
      max = r;
      min = (g > b) ? b : g;
    }
  } else {
    if(b > g) {
      max = b;
      min = r;
    } else {
      max = g;
      min = (b > r) ? r : b;
    }
  }

  v = max;

  // max = 0 なら黒でありs, h = 0
  if(max == 0) {
    return 0;
  }
  tmp = max - min;

  // s算出
  s = tmp * 255 / max;

  // max = minの時はh = 0(白か灰色)
  if(tmp == 0)
    return 0;

  if(r == max)
    h = 60 * (g - b) / tmp;
  else if(g == max)
    h = 60 * (b - r) / tmp + 120;
  else
   h = 60 * (r - g) / tmp + 240;

  if(h < 0)
    h += 360;

  return 1;
}

画素値をHSV形式に変換した後、赤っぽいところを抽出して白にそれ以外を黒にした結果。しきい値は

  • H : 36 ~ 2
  • S : 252 ~ 139
  • V : 255 ~ 197


Responses

  1. これを実行できるプログラムを作ってもらえますか?


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。