Ширина пальцев (компьютерное зрение) - PullRequest
0 голосов
/ 09 мая 2019

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

Я зафиксировал ось Y в: y = 156 преобразованном в двоичную форму названии thresh

почемуразве я не получаю результат print (width)

Идея состоит в том, чтобы зациклить ось x, в моем примере я выбрал диапазон (x, xD), а затем я ищу индексы, где есть переходот черного до белого и от белого до черного.

for i in range(x,xD):
    if thresh[i-1][156]==0 and thresh[i][156]==255:
        b2w = i
    if thresh[i-1][156]==255 and thresh[i][156]==0:
        w2b = i
        width = w2b - b2w        
        print(width)

1 Ответ

1 голос
/ 10 мая 2019

Ваша проблема в том, что ваш цикл не будет выполнен, если на вашей картинке нет четких начальной и конечной точек Если ваш палец доходит до края, вы никогда не встретите условие, при котором thresh[i] == 255 and thresh[i-1] == 0 оценивается как Истина. В наборе данных, которым вы поделились через Документы Google, именно это и происходит.

Есть много способов справиться с этим. Одним из них является использование метода индекса списка с обработкой исключений. Вы также можете сделать цикл с проверкой, если вы находитесь в конце. Пакеты, такие как numpy и pandas, будут иметь другие доступные инструменты. Вот фрагмент кода, показывающий использование метода индекса списка и отслеживание случая, когда вы достигли конца строки, фактически не имея границы:

# lst = [x[156] for x in thresh]  # to actually pull the slice from your data set
# your data pasted from Google Docs
lst = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

# so you can change it to what you want
start = 0
end = len(lst)
# end = 10  # will trigger the first except clause printing finger is not in the slice

try:
    first_255 = lst.index(255, start, end)
    try:
        last_255 = lst.index(0, first_255, end)
    except ValueError:
        last_255 = end
    print(f"width: {last_255 - first_255}")
    print(lst[first_255:last_255])
except ValueError:
    print('finger is not in the slice')
    first_255 = None
    last_255 = None

печать:

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