Питон - как поменять две локальные переменные в разных для-петли?

Я использую и , чтобы обнаружить мою руку и отправка координат (в пикселях) это к Arduino.
Все идет нормально, когда я использую 1 жест рукой. Но, когда я пытаюсь использовать 2 такой:
1. Открыл вручную -> изменение и (удерживать Y) путем перемещения влево-вправо и вверх-вниз
2. Закрытые руки -> изменить (сохранить и ), перемещая вверх-вниз
Он побежал в некоторые проблемы, как "глобальная переменная" и "локальная переменная".


import cv2                  # OpenCV
import numpy as np
from serial import Serial   # serial communication
import struct               # pack int to byte => for sending in serial

arduinoData = Serial('com6', 115200)
cap = cv2.VideoCapture(0)   # 0 = laptom camera
Closed_cascade = cv2.CascadeClassifier('Closed.xml')
Opened_cascade = cv2.CascadeClassifier('Opened.xml')

while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    Closed_detect = Closed_cascade.detectMultiScale(gray, 1.2, 5)
    Opened_detect = Opened_cascade.detectMultiScale(gray, 1.2, 5)

    for (x1, y1, w1, h1) in Opened_detect:
        cv2.rectangle(frame, (x1, y1), (x1 + w1, y1 + h1), (0, 150, 0), 2)

        servoPosition = 35
        zcenter1 = int(x1 + w1/2)
        ycenter1 = ycenter2
        xcenter1 = int(y1 + h1/2 + 30)

        arduinoData.write(struct.pack('>IIII',xcenter1,ycenter1,zcenter1,servoPosition))

    for (x2, y2, w2, h2) in Closed_detect:
        cv2.rectangle(frame, (x2, y2), (x2 + w2, y2 + h2), (0, 0, 200), 2)

        servoPosition = 5
        zcenter2 = zcenter1
        ycenter2 = int(y2 + h2/2 + 30)
        xcenter2 = xcenter1

        arduinoData.write(struct.pack('>IIII',xcenter2,ycenter2,zcenter2,servoPosition))

    cv2.imshow('Webcam', frame)
    k = cv2.waitKey(40) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

Когда я пытаюсь запустить код, некоторые ложные случиться:

name 'ycenter2' is not defined
name 'zcenter1' is not defined
name 'xcenter1' is not defined


Как обменять свои переменные, когда они находятся в 2 разных цикла функции , как показано ниже?

ycenter1 = ycenter2

zcenter2 = zcenter1  
xcenter2 = xcenter1  

Я новичок в Python, поэтому я ценю всю вашу помощь! Спасибо большое!

0
2019-09-18 13:21:14
источник
0 ответов

Посмотрите другие вопросы по меткам