Не работает фильтр чёрного цвета в rgb для opencv поиска обьектов
Извините за нубские вопросы но это капец, у меня как на зло opencv не находит только чёрный цвет, а фильтр ведь должен быть установлен именно на чёрные обьекты. Вот главная часть кода:
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(blurred, 30, 150)
czarny = cv2.inRange(hsv, (0, 0, 0), (40, 40, 40))
mask_gray = gray>0
mask_czarny = czarny>0
czarny = np.zeros_like(image, np.uint8)
czarny[mask_czarny] = image[mask_czarny]
gray = cv2.cvtColor(czarny, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(edged, 1, 255, cv2.THRESH_BINARY)
И пример его неудачной работы:
https://drive.google.com/file/d/1fYr9aCmxQHGV_bGvWojv88d_wTAjCEO3/view?usp=sharing
Ответы (2 шт):
Требуемая цветовая модель для функции inRange(src, lowerb, upperb, dst) в OpenCV-это HSV.
Параметры lowerb и upperb задают необходимые нижние и верхние границы цвета в формате HSV. В OpenCV для HSV диапазон оттенков составляет [0,179], диапазон насыщенности - [0,255], а диапазон значений - [0,255]. Источник.
Попробуйте:
czarny = cv2.inRange(hsv, (0, 0, 0), (0, 0, 16))
переводил схему тут.
У меня получилось более-менее выделить светофоры вот таким кодом:
import cv2
image = cv2.imread('traffic_light.jpg')
blur = cv2.GaussianBlur(image, (7,7), 0)
hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, (0,0,0), (179,50,55))
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=1)
close = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel, iterations=2)
cnts,_ = cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in cnts:
approx = cv2.approxPolyDP(c, 0.04 * cv2.arcLength(c, True), True)
area = cv2.contourArea(c)
if len(approx) > 3 and area > 200:
cv2.drawContours(image, [c], -1, (0,255,0), -1)
cv2.imshow('image', image)
Только не просите объяснить, я с OpenCV особо не знаком, делал методом научного тыка.
