提问者:小点点

OpenCV更改视频捕获分辨率会导致颜色问题和故障


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

  1. 初始化视频捕获时,它会将宽度/高度更改为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中未设置宽度/高度


共1个答案

匿名用户

实际上,您使用的相机有2种模式:

  1. 640x480
  2. 1920x1080

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

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

  1. 第一个原因可能是相机不支持您想要的分辨率,但在您的案例中,我们看到它支持1920x1080分辨率。所以这不能成为你的理由。
  2. 第二个原因是opencv后端不支持相机驱动程序。由于您使用的是opencv的VideoCaptureProperties,文档说明:

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

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