系统参数:Windows 8.1,Python 2.7.13,OpenCV 3.2.0.7

此代码可以正常工作。我尝试了.avi和.mp4视频:

import numpy as np
import cv2
import time

cap = cv2.VideoCapture('tmp.avi')

while(True):
    ret, frame = cap.read()

    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == 27:
         break

cap.release()
cv2.destroyAllWindows()

但是,当我尝试从网络摄像机获取图片时,尽管ret为True,但我总是看到黑屏:
import numpy as np
import cv2
import time

cap = cv2.VideoCapture(0)

while(True):
    ret, frame = cap.read()

    if not ret: continue

    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == 27:
         break

cap.release()
cv2.destroyAllWindows()

我尝试使用抓取和检索方法而不是读取方法,因此抓取返回True,但检索返回ret = False:
import numpy as np
import cv2
import time

cap = cv2.VideoCapture(0)

while(True):
    if not cap.grab(): break
    ret, frame = cap.retrieve()
    if not ret: continue

    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == 27:
         break

cap.release()
cv2.destroyAllWindows()

最后的代码可用于视频。

Windows Camera软件可以正常工作,因此网络摄像头还可以。

我尝试重新安装OpenCV,但没有帮助。

问题是什么?为什么读取方法返回True却检索方法返回False?

最佳答案

我今天在使用gocv.io库的Windows上也遇到了这个问题。

我删除并重新安装了网络摄像头驱动程序,问题已解决。

08-24 21:20