cv2.VideoCapture(0, cv2.DSHOW) returns none

cv2.VideoCapture(0, cv2.DSHOW) returns none

我正在尝试使用 opencv 从笔记本电脑(或外部 USB 摄像头)上的内置网络摄像头捕获视频,特别是带有 DSHOW 参数的 VideoCapture。 我知道有一种方法可以设置分辨率甚至 FPS,但是 API returns none 的 DirectShow 参数当我将它包含在代码。

例如;

# returns my webcam's stream, but all optional arguments are ignored
camera = cv2.VideoCapture(0)
camera = cv2.VideoCapture(0, cv2.CAP_V4L2)

# returns none and loops infinitely or errors out when *if im.any()*
camera = cv2.VideoCapture(0, cv2.CAP_DSHOW)

这是上面后面的代码;

# should set resolution, settings are always ignored
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

while(True):
    retval, im = camera.read()
    if im.any(): # errors out when image is none
        cv2.imshow("image", im)

    k = cv2.waitKey(33)
    if k==27: # Esc key press
        print('Resolution: {0}x and {1}y'.format(im.shape[1],im.shape[0]))
        print('FPS: {0}'.format(camera.get(cv2.CAP_PROP_FPS)))
        break

camera.release()
cv2.destroyAllWindows()

DSHOW 是否正确 API 使用,它是否是唯一 API 可以使用 opencv 更改相机流的分辨率和 FPS 的方法?还是我做错了什么?

有关系统的更多详细信息。

提前感谢您的帮助!

此致,蒂兹

DSHOW(和 MSMF)仅 windows。

在 linux 上,使用 V4L、FFMPEG 或 GS​​TREAMER

另外,请检查 capture.set() 的return 值, 并非所有 properties/values 都将在任何给定机器上得到支持