Python 3.x 为什么cv2.VideoCapture read()方法不';如果ret为真,是否返回帧?

Python 3.x 为什么cv2.VideoCapture read()方法不';如果ret为真,是否返回帧?,python-3.x,opencv,Python 3.x,Opencv,我正在尝试先获取帧,这样我就可以从中识别出一张脸(使用我的计算机网络摄像头) 但是当我调用read()方法时,它崩溃了。正在说元组索引超出范围。 我想这是因为我给它的第一帧是空的。 所以它没有任何东西可以转换成元组。 但我学习的那个家伙(我老师给我的课程),他做到了,而且对他很有用 我的代码: import cv2 import numpy as np cap = cv2.VideoCapture(0) ret, frame = cap.read() --> ret is True,

我正在尝试先获取帧,这样我就可以从中识别出一张脸(使用我的计算机网络摄像头) 但是当我调用
read()
方法时,它崩溃了。正在说
元组索引超出范围
。 我想这是因为我给它的第一帧是空的。 所以它没有任何东西可以转换成元组。 但我学习的那个家伙(我老师给我的课程),他做到了,而且对他很有用

我的代码:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

ret, frame = cap.read() --> ret is True, but frame is just [[[000,000]]] (and so on with the '0')
print(ret)
face_cascade = cv2.CascadeClassifier('DATA/haarcascades/haarcascade_frontalface_default.xml')
face_rects = face_cascade.detectMultiScale(frame,scaleFactor=1.2,minNeighbors=5)
print(face_rects)

(face_x,face_y,w,h) = tuple(face_rects[0]) --> crashes here saying "tuple index out of range"
track_window = (face_x,face_y,w,h)
roi = frame[face_y:face_y+h,face_x:face_x+w]

hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)

roi_hist = cv2.calcHist([hsv_roi], [0], None, [180], [0, 180])

cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)

term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)

while True:

ret, frame = cap.read()

if ret == True:
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    dst = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)

    ret, track_window = cv2.meanShift(dst, track_window, term_crit)

    x, y, w, h = track_window
    img2 = cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 5)

    cv2.imshow("img", img2)

    if cv2.waitKey(1) & 0xFF == 27:
        break
else:
    break
第1章释放()
cv2.destroyAllWindows()

基本上是[[0000]]。。。。开始时返回黑色帧。这将主要是因为你的USB网络摄像头,因为它需要更多的时间来加载最初。由于您的教授可能在不同的环境中使用不同的硬件,他可能没有这个问题,因为它加载速度很快并发送帧。你可以做的是在反复试验的基础上睡眠几秒钟,或者你可以忽略前几帧基于非零计数的方法,比如
np.count\u nonzero()

谢谢:)我使用了
sleep()
方法,效果很好。