2015-10-18 2 views
3

Я пытаюсь выполнить обычное обнаружение цветных объектов с помощью OpenCV и Python.Проблема с обнаружением цвета с изображения HSV с использованием OpenCV и Python

Я прочитал несколько руководств, но я столкнулся с запутанной проблемой, которая мешает мне развиваться. Хотя я предоставляю правильные данные HSV, моя программа, похоже, не обнаруживает объекты этого цвета.

Я использую этот файл (извините за плохое качество веб-камеры):

Sample

Для того, чтобы обнаружить красный объект, я выздоровел цвет данных HSV:

Color data

И вот мой код:

YELLOW = 30 
BLUE = 210 
GREEN = 145 
RED = 320 

color = RED 

img = cv2.imread("sample.png") 

hue = color // 2 

lower_range = np.array([max(0, hue - 10), 0, 0], dtype=np.uint8) 
upper_range = np.array([min(180, hue + 10), 255, 255], dtype=np.uint8) 

img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 

mask = cv2.inRange(img, lower_range, upper_range) 

binary_img = cv2.bitwise_and(img_hsv, img_hsv, mask=mask) 
binary_img = cv2.cvtColor(binary_img, cv2.COLOR_BGR2GRAY) 
_, binary_img = cv2.threshold(binary_img, 127, 255, cv2.THRESH_BINARY) 

cv2.imshow('sample', binary_img) 
cv2.waitKey(0) 

Результат:

Result

Результат для других цветов правильно (не совершенен из-за плохого качества, я думаю), но я не могу получить что-то для красного. Тем не менее, HSV конвертируется изображение довольно четко:

HSV Image

Вы видите, что я делаю неправильно, пожалуйста?

ответ

3

Вы делаете все правильно, единственная проблема заключается в том, что вы применяете свой порог на изображении BGR вместо HSV.

Изменение:

mask = cv2.inRange(img, lower_range, upper_range) 

Для

mask = cv2.inRange(img_hsv, lower_range, upper_range) 

Я проверил это, и это выглядит просто отлично. Я думаю, вам понадобятся некоторые морфологические операции, чтобы добраться до вашего конечного результата.

+0

Спасибо! Я потерял так много времени из-за этой глупой ошибки новичков ... – Delgan

+1

Я использую изображение HSV, но получаю странный результат. Если у вас есть время, вы можете посмотреть на него [здесь] (http://stackoverflow.com/questions/34170856/trying-to-detect-blue-color-from-image-using-opencv-and-getting-unexpected -resu)? – Solace