1

cv2 无法设置 fps,但我可以使用 ; 更改 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.VideoCapture 改变了分辨率。好的,所以它不关心 v4l2-ctl 编写的设置并覆盖它自己的设置。所以我尝试;

camcapture.set(3,640)
camcapture.set(4,480)

图像如预期的那样为 640x480,但帧速率降至 30fps。这次它覆盖了 fps 值。即使相机支持它,我也无法让它在 640x480@60fps 下工作。

有什么想法可以防止 cv2.VideoCapture 覆盖 v4l2-ctl 书面设置吗?

4

2 回答 2

3

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)
于 2019-07-14T12:10:17.220 回答
2

您为什么不尝试明确要求所需的帧速率:

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:虽然改变 3 per cv2.cv.CV_CAP_PROP_FRAME_WIDTH,可以帮助阅读你的代码......

于 2014-11-06T16:35:56.133 回答