Кратко глядя на этот код, он выглядит, как он находит оба глаза, но только тогда дает один. Просто измените код по мере необходимости, чтобы извлечь два найденных капли, а не только один. линии 55-72, где он обрезает ваш пул кандидатов из некоторого количества капель (возможных зрачков) до 1.
Все эти строки: «если len (контуры)> = n» в основном говорят, если вы все еще есть более одного блоба, попробуйте вырезать один. Дело в том, что вы хотите, чтобы ДВЕ самые большие капли, а не одно. Итак, вам нужно переписать эти контрольные утверждения таким образом, чтобы вы удалили все, кроме двух самых больших капель, а затем нарисуйте круги на каждом из своих центроидов. Насколько я могу судить, ничто другое не нуждается в модификации.
вот несколько примеров кода (непроверенных), которые могут помочь. я не знаю синтаксис питона и только изменил некоторые вещи из вашего связанного файла:
while len(contours) > 2:
#find smallest blob and delete it
minArea = 1000000 #this should be the dimensions of your image to be safe
MAindex = 0 #to get the unwanted frame
currentIndex = 0
for cnt in contours:
area = cv2.contourArea(cnt)
if area < minArea:
minArea = area
MAindex = currentIndex
currentIndex = currentIndex + 1
del contours[MAindex] #remove the picture frame contour
del distanceX[MAindex]
Это приведет вас вниз к вашим двум глазам капли, то вам все равно нужно добавить круг рисунка для каждого сгустка центр. (вам нужно удалить все операторы «if len ...» и заменить их на этот оператор while)
Когда я сменил на 1. Я получаю эту ошибку: @SneakyPolarBear C:/Python27/Projects/proj/pupil.py:38: VisibleDeprecationWarning: использование нецелого числа вместо целого числа приведет к ошибке в будущем pupilFrame = cv2.equalizeHist (frame [y + (h * .25) :(y + h), x : (х + ш)]) Traceback (самый последний вызов последнего): Файл "C: /Python27/Projects/proj/pupil.py", строка 92, в , если Len (largeBlob)> 0: \t NameError: name 'largeBlob' не определен –
MwarukaSon
Я не программирую на python, поэтому отладка зависит от вас, но я не думаю, что вы меня поняли, поэтому я добавил к своему ответу –