Как собрать значения кортежа в операторе if?
У меня есть код, который состоит из if
заявление в for
цикл, как показано ниже,
for i in range(len(contours)):
x, y, w, h = cv2.boundingRect(contours[i])
mask[y:y+w, x:x+w] = 0
cv2.drawContours(mask, contours, i, (255, 255, 255), -1)
r = float(cv2.countNonZero(mask[y:y+h, x:x+w])) / (w * h)
if r > 0.5 and w > 8 and h > 8:
cv2.rectangle(rgb, (x, y), (x+w, y+h), (255, 255, 255), -1)
cv2.circle(rgb, (x+w/2,y+h/2), 3, (180, 25, 20), -1)
start_target_states = x+w/2 , y+h/2
print "start_target_states: %s" % (start_target_states,)
при запуске этого кода это выглядит так, как показано ниже;
start_target_states: (704, 463)
start_target_states: (83, 15)
Тем не мение, start_target_states
переменная должна быть названа как start_state
для первого результата, впоследствии, он должен быть назван как target_state
за второй результат. Например;
target_state: (704, 463)
start_state: (83, 15)
Более того, я хочу присвоить этим двум кортежам имя переменной. Так что я могу использовать их позже. Я имею в виду,
TargetState = target_state
StartState = start_state
Я пытался изменить заявление, чтобы достичь своей цели, к сожалению, я не смог добиться успеха. Как я могу делать то, что я хочу?
1 ответ
Если вам нужно получить к ним доступ позже, вы можете просто добавить их в список.
states = []
for i in range(len(contours)):
x, y, w, h = cv2.boundingRect(contours[i])
mask[y:y+w, x:x+w] = 0
cv2.drawContours(mask, contours, i, (255, 255, 255), -1)
r = float(cv2.countNonZero(mask[y:y+h, x:x+w])) / (w * h)
if r > 0.5 and w > 8 and h > 8:
cv2.rectangle(rgb, (x, y), (x+w, y+h), (255, 255, 255), -1)
cv2.circle(rgb, (x+w/2,y+h/2), 3, (180, 25, 20), -1)
start_target_states = x+w/2 , y+h/2
states.append(start_target_states)
print "start_target_states: %s" % (start_target_states,)
Поскольку у вас есть их в списке, вы все равно можете получить к ним доступ, потому что вы не переопределяете их каждый раз.
target_state = states[0]
start_state = states[1]
или, в общем, если вы хотите захватить первое и последнее:
target_state = states[0]
start_state = states[-1]
Кроме того, это не то, о чем вы спрашивали, но лучше использовать enumerate
для такого рода петли.
for i, contour in enumerate(contours):
а потом вместо использования counters[i]
Вы можете просто использовать contour
,