2016-07-12 4 views
1

基本的には、すべてのピクセルを繰り返し処理したいと思います。範囲が間違っている場合は、RGB値を白に、それ以外は黒に変更します。範囲内の場合は、ピクセルを黒に、それ以外を白に変更します。

私はマスクを使用する例をいくつか見てきましたが、私はマスクを使ってRGB値を比較する方法について混乱しています。 私の範囲は、したがって、最初の私はYCrCbの中で、私のイメージは、IMGを持っているように

min_YCrCb = np.array([0,133,77],np.uint8) 
max_YCrCb = np.array([255,173,127],np.uint8) 

ようです。 RGBが範囲内にあるかどうかを確認するマスクを作成するにはどうすればいいのですか?それが終わったら、どのように白黒に設定しますか?

+0

ブラックは0,0,0である。白は255,255,255です。範囲がすべてであるので、Rをチェックする必要はありません。あなたが望む2つの極端なGとBを確認してください –

+0

しかし、どのようにGとBをチェックするのですか?私は一般的にピクセルのRGBにアクセスする方法を見つけることができません – lambda

+0

'マスク'についてはわかりませんが、132

答えて

1

私はinRange方法があなたが必要とするものだと思います。

だから、あなたの例では、あなたが使用することもできます。その値が与えられた範囲内にある場合

# Keep in mind that OpenCV stores things in BGR order, not RGB 
lowerBound = cv.Scalar(0, 133, 770) 
upperBound = cv.Scalar(255, 173, 127) 

# this gives you the mask for those in the ranges you specified 
cv.InRange(cv_input, lowerBound, upperBound, cv_output); 

をごcv_input内の各ピクセルについて、それはそれ以外の場合は0、255(すべて1)に設定されます。逆の場合はNotメソッドを使用できます。

# This will set all bits in cv_input 
cv.Not(cv_output, cv_inverse) 
関連する問題