2

コンポーネントが等しいかどうかを塗りつぶした色で比較したい次のアルゴリズムを実行し、次のようにRGBの平均化を行います

                double avg1 =(comp[0].Red+comp[0].Blue+comp[0].Green)/3;
                double avg2 =(comp[1].Red+comp[1].Blue+comp[1].Green)/3;

次に、次のように比較します

                      double ratio  = avg1/avg2 ;
                      if(ratio > 0.8 && ratio < 1.2){} //then they are supposed to be equal

しかし、この方法はまったく正確ではありません

検索した後、画像をHSL空間に変換して比較するのが最善の方法であることがわかりましたが、2つの色を比較する方法がわかりません?!! ここ

言い換えれば、画像をHSL空間に変換した後、何ができますか?!

助けてください !!

より明確にするための質問への変更私はコンポーネント(ポイントのシーケンス)を意味するので、平均化ステップで実際にすべてのポイントを再訪し、各ピクセルのrgbの平均の合計を計算し、ポイントの総数を平均化します

4

2 に答える 2

1

HSLに変換し、H(色相)の差を使用して色をグループ化します。

于 2011-07-14T02:29:20.263 に答える
1

あなたの質問が「画像を HSL 空間に変換した後、何ができるの?!」次に、ここに行きます:

  1. cvCvtColor()フラグを使用して、読み込んだ RGB 画像を HSL に変換しますCV_RGB2HLS(HSL 画像は当然 3 チャンネルである必要があります)。
  2. H、L、S チャネルを 3 つの単一チャネル画像 (同じサイズ) に分割して作成します。
  3. cvSplit( hls, h, l, s, 0 )HSL 画像をチャンネルに分離する
  4. これで、h_image はシングル チャネルのグレースケール イメージとまったく同じになります。したがって、コンポーネントを抽出した後 (RGB 画像のしきい値処理からこれを行います。色相チャネル画像が奇妙に見える場合があります:P)、それらの座標に対応する色相画像の色を比較するだけです。

お役に立てれば。

于 2011-07-15T01:05:58.617 に答える