Как сравнить в течение l oop текущее значение индекса со следующим значением индекса? - PullRequest
1 голос
/ 09 апреля 2020

У меня есть такой массив: [(x1, y1, x2, y2), (x1, y1, x2, y2), (x1, y1, x2, y2), (x1, y1, x2, y2) ], и мой код:

def draw_lines(image, lines, color=[255, 0, 0], thickness=2, make_copy=True):

if make_copy:
    image = np.copy(image) 
cleaned = []

for line in lines:
    for x1,y1,x2,y2 in line:

        if abs(x2-x1) <=10 and abs(y2-y1) >=19 and abs(y2-y1) <= 70 :
            cleaned.append((x1,y1,x2,y2))
            cv2.line(image, (x1, y1), (x2, y2), color, thickness)
print(" No lines detected: ", len(cleaned))
print (cleaned)
return image

В операторе if я хотел бы добавить новый критерий "и", который сравнивает текущее значение x1 массива со следующим рядом x1 значением массива. Например: x1 [i + 1] -x1 [i]> 10

Как использовать индекс и итерацию в этом случае?

Заранее спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

Вы можете сделать это:

for line, next_line in zip(lines, lines[1:]):

или если вы хотите получить доступ к отдельным координатам как отдельным переменным:

for (x1, y1, x2, y2), (x1_, y1_, x2_, y2_) in zip(lines, lines[1:]):

Обратите внимание, что l oop остановится в последний раз -но одну позицию в списке.

0 голосов
/ 09 апреля 2020

Вы ищете for ind in range(len(lines)): дает вам 4 цикла, поскольку в списке четыре кортежа. Итак, line[0] - это первый кортеж, а lines[0][0] - это x1

. Таким образом, для получения x1 [i + 1] -x1 [i] будет

for ind in range(len(lines)):

    if ind < len(lines): #Ensures no out of bounds
        if lines[ind+1][0]-lines[ind][0] < 10:
            #Do something
        else:
            #Greater or equal to 10
0 голосов
/ 09 апреля 2020

Я не лучший в этом деле, но вот сайт, который, я думаю, вы должны проверить, который, надеюсь, поможет вам:

https://www.fluentcpp.com/2018/10/26/how-to-access-the-index-of-the-current-element-in-a-modern-for-loop/

...