Самый простой способ обнаружить черный цвет - это установить двоичный порог в оттенках серого.Значения черного пикселя всегда будут иметь очень низкое значение, поэтому было бы легче сделать это на 1-канальном изображении, а не на 3-канальном.Я бы порекомендовал:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 15, 255, cv2.THRESH_BINARY_INV)
изменять значение 15, пока не получите разумные результаты.Более низкое значение приведет к сохранению только более темных пикселей.Если вы хотите извлечь местоположение пикселей, вы также можете получить контуры, например
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
, а затем нарисовать контур обратно на исходный кадр с помощью:
frame = cv2.drawContours(frame, contours, -1,(0,0,255),3)
В качестве альтернативы вы можетеможет оказаться проще сначала инвертировать изображение, чтобы вы пытались извлечь белые пиксели.Это может привести к меньшей путанице с пикселями, которые вы хотите извлечь, схожими с пикселем маски (0).Вы можете сделать это просто с помощью вычитания numpy, а затем установить очень высокое значение для порога, например:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = 255-gray
ret, thresh = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
frame = cv2.drawContours(frame, contours, -1,(0,0,255),3)