2016-07-12 4 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 (все 1s), в противном случае 0. Если вы хотите инверсию, вы можете использовать метод Not.

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