错误消息的相关片段是函数cvGetMat中的无法识别或不支持的数组类型. cvGetMat()函数将数组转换为Mat. Mat是OpenCV在C/C++世界中使用的矩阵数据类型(注意:您正在使用的Python OpenCV接口使用Numpy数组,然后在后台将其转换为Mat数组).考虑到这个背景,问题似乎是你传递给cv2.imshow()的数组很难形成.两个想法:
>这可能是由于您网络摄像头上的怪异行为造成的……在某些相机上,会不时返回空帧.在将im数组传递给imshow()之前,请尝试确保它不为null.
>如果每帧都出现错误,则取消您正在进行的某些处理,并在从网络摄像头抓取帧后立即调用cv2.imshow().如果仍然无法正常工作,那么您就会知道这是您网络摄像头的问题.否则,逐行添加您的处理,直到您找出问题为止.例如,从这开始:
while True:
# Grab frame from webcam
retVal, image = capture.read(); # note: ignore retVal
# faces = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(100,100),flags=cv.CV_HAAR_DO_CANNY_PRUNING);
# Draw rectangles on image, and then show it
# for (x,y,w,h) in faces:
# cv2.rectangle(image, (x,y), (x+w,y+h), 255)
cv2.imshow("Video", image)
i += 1;