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 吗?还是我做错了什么?
有关系统的更多详细信息。
预先感谢您的帮助!
问候,蒂兹
DSHOW(和 MSMF)仅适用于 Windows。
在 Linux 上,使用 V4L、FFMPEG 或 GSTREAMER
另外,请检查capture.set() 的返回值,并非所有属性/值在任何给定机器上都受支持