cv2不能设置fps,但是我可以使用;
v4l2-ctl -d 1 --set-parm=60
v4l2-ctl -d 1 --set-fmt-video=width=640,height=480
但当我试图;
camcapture = cv2.VideoCapture(1)
_,f = camcapture.read()
cv2.imwrite(filename, f)
捕获为60fps,但分辨率为320x240。很明显,cv2。视频捕获改变分辨率。所以它不关心v4l2-ctl写的设置和覆盖它自己的。所以我尝试;
camcapture.set(3,640)
camcapture.set(4,480)
图像是640x480,但帧率下降到30fps。这一次它覆盖了fps值。即使相机支持它,我也不能在640x480@60fps上使用它。
有预防cv2的方法吗?VideoCapture重写v4l2-ctl写入设置?
OpenCV自动选择第一个可用的捕获后端(见这里)。它可能没有自动使用V4L2。
在构建时也设置-D WITH_V4L=ON
和-D WITH_LIBV4L=ON
。
为了设置要使用的像素格式,设置捕获的CAP_PROP_FOURCC
属性:
capture = cv2.VideoCapture(self.cam_id, cv2.CAP_V4L2)
capture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
width = 1920
height = 1080
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
为什么不显式地请求所需的帧率呢:
camcapture.set(cv2.cv.CV_CAP_PROP_FPS,60)
或者如果你喜欢整数混淆:
camcapture.set(5,60)
所以相机(也许)会告诉你:
HIGHGUI ERROR: V4L: Property <unknown property string>(5) not supported by device
PS:虽然每个cv2.cv.CV_CAP_PROP_FRAME_WIDTH
更改3,可以帮助阅读您的代码…