【问题标题】:how does cv2.VideoCapture() changes capture resolution?cv2.VideoCapture() 如何改变捕获分辨率?
【发布时间】:2012-12-10 06:58:11
【问题描述】:

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 书面设置吗?

【问题讨论】:

  • 如果我错了,请纠正我,640*480*3*60/1000000 = 55 MB/s 吞吐量是您需要的,但理论上的 usb 2.0 限制为 60 MB - 实现该速率并不常见.所以规格说 640x480 @ 60 fps 可能意味着灰度输出。

标签: python opencv camera


【解决方案1】:

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

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 个,但可能有助于阅读您的代码...

【讨论】:

    【解决方案2】:

    OpenCV 自动选择第一个可用的捕获后端(see here)。可能是它没有自动使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 2018-01-18
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多