【问题标题】:OpenCV changing VideoCapture resolution causes colour issues and glitchesOpenCV 更改 VideoCapture 分辨率会导致颜色问题和故障
【发布时间】:2021-09-06 06:57:03
【问题描述】:

我想用相机拍摄 1920x1080 的视频,但遇到了两个问题

  1. 当我初始化 VideoCapture 时,它​​会将宽度/高度更改为 640/480
  2. 当我尝试更改 cv2 中的宽度/高度时,图像变得混乱

图片

在 cv2 中设置 1920x1080 时,图像变为蓝色并且底部有一个故障条

cap = cv2.VideoCapture('/dev/video0')
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

这是根据 v4l2-ctl 发生的情况。蓝色图像似乎不是像素格式更改的结果(例如 RGB 到 BGR)

最后,这是一个以 640x480 拍摄的具有正确颜色的图像示例。代码中唯一的区别是cv2中没有设置width/height

【问题讨论】:

  • 最简单的问题第一:相机是否支持这个新分辨率?就分辨率本身以及纵横比而言(16:9 对 4:3)
  • 相机的规格是什么(例如,相机在 1080p 时支持的帧率是多少?(例如 15 / 24 / 30 / 60 / 等))?你检索帧的速度有多快?
  • 这是一个raspi cam v2,它声称支持 30fps 的 1080p,我以 12fps 的速度运行。也许它仍然可能与纵横比有关......还有另一种检查方法吗?

标签: python opencv


【解决方案1】:

问题:

其实你使用的相机有两种模式:

  1. 640x480
  2. 1920x1080

一个用于主流,一个用于子流。我也遇到过几次这个问题,这里是它不起作用的可能原因。

注意:我假设您尝试了不同的方式以全分辨率(1920x1080)运行,例如 cv2.VideoCapture(0)cv2.VideoCapture(-1)cv2.VideoCapture(1) ...

可能的原因

  1. 第一个原因可能是相机不支持您想要的分辨率,但在您的情况下,我们看到它支持 1920x1080 分辨率。所以这不可能是您的问题的原因。
  2. 一般原因的第二个原因是opencv backend 不支持您的相机驱动程序。由于您使用的是 opencv 的 VideoCapturePropertiesDocumentation 说:

读/写属性涉及很多层。沿着这条链可能会发生一些意想不到的结果。有效行为取决于设备硬件、驱动程序和 API 后端。

你可以做什么:

在这种情况下,如果您确实需要达到该分辨率并与opencv兼容,则应使用相机的SDK(如果有)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2017-05-20
    • 1970-01-01
    • 2014-05-15
    相关资源
    最近更新 更多