cv2.VideoCapture(0, cv2.DSHOW) 返回无

TIZ*_*012 1 streaming opencv ubuntu-18.04 python-3.9

我正在尝试使用 opencv 从笔记本电脑(或外部 USB 摄像头)上的内置网络摄像头捕获视频,特别是带有 DSHOW 参数的 VideoCapture。我知道有一种方法可以设置分辨率甚至 FPS,但是当我将其包含在代码中时, API 的 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)
Run Code Online (Sandbox Code Playgroud)

这是上面之后的代码;

# 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()
Run Code Online (Sandbox Code Playgroud)

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

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

  • 乌班图18.04.6
  • 蟒蛇3.9.5
  • opencv-python 4.5.2.52

预先感谢您的帮助!

问候,蒂兹

ber*_*rak 6

DSHOW(和 MSMF)仅适用于 Windows。

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

另外,请检查capture.set() 的返回值,并非所有属性/值在任何给定机器上都受支持