2012-02-17 14 views
0

あなたは画像内のすべての黒/灰色の要素の点を検出/戻す方法を知っていますか? 可能であれば、私のチュートリアルコードを含めてください。OpenCVの黒/灰色の要素を検出する

編集:ソース "img"からしきい値付きの画像を作成しました。私はすべての色のピクセルを白にしようとしています。すべての3つの値(R、G及びB)が同じである場合、入力された画像は、次に、24ビットフォーマット、すなわちR、G、B画素であると仮定すると

for(x=0; x<img->width; x++) { 
    for(y=0;y<img->height; y++) { 
    uchar* temp_ptr = &((uchar*)(img_result_threshold->imageData + img_result_threshold->widthStep*y))[x]; 
    s = cvGet2D(img_hsv, y, x); 
    if(s.val[1] >= 100 && s.val[2] >= 100) { 
     temp_ptr[0]=255; //White to greater of threshold 
     printf("Point(%d, %d) = (%.1f, %.1f, %.1f)\n", x, y, s.val[0], s.val[1], s.val[2]); 
    } else { 
     temp_ptr[0]=0; //Black other 
    } 
    } 
} 
+0

今までの回答はありません。 –

+0

何ですか?これは冗談ですか? –

+0

私はすでに各ピクセルの要素値を取得していますが、色付きの要素と灰色の要素を分ける予定です。 私の最初の仕事は間違っていると思うので、私はそれを投稿するつもりはない。 –

答えて

2

はグレースケールです。

画像をループして、現在のピクセルのR、G、B要素が同じ値であるかどうかを確認し、一致しない場合はピクセルを白に設定します。

グレースケールピクセルだけの画像が残ります。

濃い灰色のピクセルが必要な場合は、RGB値が同じかどうかを確認するときに、値が127(またはしきい値を設定したい値)より小さいかどうかを2回目のチェックで確認できます。 。

+0

灰色ピクセルがRGBの値と等しくない場合もあります。つまり、(100,99,98)、画像では灰色に見えますか? –

+1

私はそれらが技術的にグレー値ではないと思っていますが、それらを含める場合は、RGB値が互いにxの範囲内にあるかどうかをチェックするのは簡単でしょう。 – TomP89

+0

しかし、私が最初にHSVに画像を変換する場合、より良い方法がありますか? –

-2
  1. 第下記によってグレー画像にカラー画像を変換し、あなたの画像はRGB

    cvtColor(im_rgb、im_gray、CV_RGB2GRAY)が提供されます。

  2. cvThreshold(im_gray、im_bw、127、255、CV_THRESH_BINARY)を言い、あなたの閾値を用いてバイナリに画像を変換します。

+1

私は彼/彼女がカラー画像から灰色のピクセルを抽出しようとしているが、画像全体をグレースケールに変換しようとは思わない – TomP89

+0

上記のコードを使用すると、灰色のピクセルをすべて255とマークするマスク画像が生成され、それらのピクセルを抽出するために、位置が分かる。それはすべて彼/彼女の目的にかかっています。しかし、色付きのピクセルがグレーであるかどうかを確認するには、最初にグレーピクセルに変換する方がよいでしょう。 – james

+0

ただし、カラーピクセルをグレーピクセルに変換する場合、保持するグレーピクセルの一部はもともとカラーになっています – TomP89