2016-07-12 77 views
1

所以基本上,我想遍歷所有像素,如果它們在範圍內,則將它們的RGB值更改爲白色,否則更改爲黑色。迭代所有像素,如果在範圍內,則將像素更改爲黑色,否則更改爲白色

我見過幾個使用遮罩的例子,但我很困惑,我會如何使用遮罩來比較RGB值。 我的範圍是這樣

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

所以首先我有我的形象,IMG,在YCrCb的。我如何創建一個面具,以便它能夠看到RGB是否在範圍內,一旦完成,我如何將它們設置爲黑白?

+0

黑色是0,0,0。白色是255,255,255。你不需要檢查R,因爲它的範圍是整個事情。用你想要的兩個極端檢查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每個像素,如果它的值是在給定的範圍內,它將被設置爲255(全1),否則爲0。如果你想要反轉,你可以使用Not方法。

# This will set all bits in cv_input 
cv.Not(cv_output, cv_inverse) 
相關問題