[英]Python Identifier Issue with Tuple & For Loop
我目前正在尝试将 (2) 值存储到 2 个 1D 元组中,以供 OpenCV 之后使用。 但是,由于我对 Python 非常陌生,因此我目前在元组标识符方面面临一个相当“简单”的问题。 当我运行以下代码时:
import cv2
import numpy as np
import imutils
cap= cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
point1 = []
point2 = []
while True:
_,frame= cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,50,120])
upper_red = np.array([10,255,255])
lower_yellow = np.array([25,70,120])
upper_yellow = np.array([30,255,255])
lower_blue = np.array([90,60,0])
upper_blue = np.array([121,255,255])
maskred = cv2.inRange(hsv,lower_red,upper_red)
maskyellow = cv2.inRange(hsv,lower_yellow,upper_yellow)
maskblue = cv2.inRange(hsv,lower_blue,upper_blue)
cntsred = cv2.findContours(maskred, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cntsred = imutils.grab_contours(cntsred)
cntsyellow = cv2.findContours(maskyellow, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cntsyellow = imutils.grab_contours(cntsyellow)
cntsblue = cv2.findContours(maskblue, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cntsblue = imutils.grab_contours(cntsblue)
for c in cntsred:
areared = cv2.contourArea(c)
if areared > 5000:
cv2.drawContours(frame,[c],-1,(0,255,0), 3)
M = cv2.moments(c)
cxred = int(M["m10"]/ M["m00"])
cyred = int(M["m01"]/ M["m00"])
cv2.circle(frame,(cxred,cyred),7,(255,255,255),-1)
cv2.putText(frame, "Red", (cxred-20, cyred-20), cv2.FONT_HERSHEY_SIMPLEX, 2.5, (255, 255, 255), 3)
redcoord = (cxred, cyred)
for c in cntsyellow:
areayellow = cv2.contourArea(c)
if areayellow > 5000:
cv2.drawContours(frame,[c],-1,(0,255,0), 3)
M = cv2.moments(c)
cxyellow = int(M["m10"]/ M["m00"])
cyyellow = int(M["m01"]/ M["m00"])
cv2.circle(frame,(cxyellow,cyyellow),7,(255,255,255),-1)
cv2.putText(frame, "Yellow", (cxyellow-20, cyyellow-20), cv2.FONT_HERSHEY_SIMPLEX, 2.5, (255, 255, 255), 3)
yellowcoord = (cxyellow, cyyellow)
cv2.line(frame, redcoord, yellowcoord, (0, 255, 0), 3)
如图所示,存在以下语法错误。
我可以检查是否是由于某些缩进或声明问题导致“yellowcoord”元组无法识别?
yellowcoord
在 for 循环中的 if 块内定义。 如果 if 块的内容从未运行(即如果areayellow
从未大于 5000),则不会定义yellowcoord
。
您可以通过在循环之前将yellowcoord
初始化为 None 来检查这种意外情况,然后在循环之后测试它是否被赋予了另一个值:
yellowcoord = None
for c in cntsyellow:
areayellow = cv2.contourArea(c)
if areayellow > 5000:
...
yellowcoord = (cxyellow, cyyellow)
if yellowcoord is not None:
# Now I know I can use yellowcoord safely
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.