cv2. videoccapture()如何改变捕获分辨率



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,可以帮助阅读您的代码…

相关内容

  • 没有找到相关文章

最新更新