Цветовое пространство
LAB имеет 3 канала, L
от 0 до 100%, a
от -128 до 128 и b
от -128 до 128. Значения OpenCV в LAB для изображения uint8следующие:
![enter image description here](https://i.stack.imgur.com/1CeS6.png)
Ваша проблема в том, что в OpenCV значение (0,0,0
) в LAB в действительности (0, -128, -128)
, которое можно посмотреть вонлайн colorpicker и посмотрите, что это синий.
Когда вы применяете маску, то, что не в маске, остается "черным" (0,0,0) и после преобразования изLAB to BGR затем синий.Если идея состоит в том, чтобы оставить то, что не выделено черным, у вас есть 2 решения:
1) применить маску к исходному изображению
2) преобразовать 0,0,0
пикселей в 0,128,128
Для 1) код будет таким:
# Parameter "frame": BGR image.
# Parameter "min": min LAB val.
# Parameter "max": max LAB val.
# Return filtered frame in BGR.
def applyFilter(frame, min, max):
tempFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)
mask = cv2.inRange(tempFrame, min, max)
mask = cv2.bitwise_not(mask)
filtered_frame = cv2.bitwise_and(frame, frame, mask=mask)
return filtered_frame