Подсчитать количество объектов в изображении с OpenCV в Python - PullRequest
1 голос
/ 06 мая 2019

Я новичок в обработке изображений и мне нужно посчитать количество объектов разных цветов. Вот изображение:

Сначала я преобразовал изображение из RGB в HSV.После этого я сегментировал цвета следующим образом:

blue = np.uint8([[[0,191,255]]]) 
hsv_blue = cv2.cvtColor(blue,cv2.COLOR_RGB2HSV)
lower_blue = np.array([(hsv_blue[0][0][0]-10,100,100)])
upper_blue = np.array([(hsv_blue[0][0][0]+10,255,255)])
mask_1 = cv2.inRange(hsv, lower_blue, upper_blue)
result_1 = cv2.bitwise_and(img, img, mask=mask_1)
plt.imshow(result_1)

result_1 можно увидеть здесь

И я сделал это для других цветов (я нене знаю, существует ли метод обнаружения цветов).

Моя идея заключалась в том, чтобы использовать функцию cv2.findContours () для изображения result_1.Следовательно, для этого необходима серая шкала, я разделил result_1 на каналы h, s, v с

h,s,v = cv2.split(result_1)

и в соответствии с этим: Преобразование HSV в оттенки серого в OpenCV Мне нужно толькозначение V (мне не нужно конвертировать HSV в серый).После использования findContours мне нужно только распечатать длину результата.

Я пробовал следующие решения:

cent , _ = cv2.findContours(v_blue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
print(len(cent)) 

, и результат равен 1, что неверно.

cent , _ = cv2.findContours(mask_1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
print(len(cent))

и результат 689.

Что я делаю не так? / Есть ли более простые / лучшие решения?(Я должен использовать openCV).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...