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

时间:2012-12-23 13:42:56

标签: python opencv camera

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写入的设置?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

OpenCV自动选择第一个可用的捕获后端(see here)。可能是它没有自动使用V4L2。

还要在构建时同时设置-D WITH_V4L=ON-D WITH_LIBV4L=ON

要设置要使用的像素格式,请设置捕获的CAP_PROP_FOURCC属性:

  capture = cv2.VideoCapture(self.cam_id, cv2.CAP_V4L2)
  scapture.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)