OpenCV 更改 VideoCapture 分辨率会导致颜色问题和故障

OpenCV changing VideoCapture resolution causes colour issues and glitches

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

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

图片

当在 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

问题:

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

  1. 640x480
  2. 1920x1080

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

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

可能的原因

  1. 第一个原因可能是相机不支持您想要的分辨率,但在您的情况下,我们看到它支持 1920x1080 分辨率。所以这不能成为你问题的原因。
  2. 第二个原因是一般原因是 opencv backend doesn't support your camera driver. Since you are using VideoCaptureProperties of opencv, Documentation 说:

Reading / writing properties involves many layers. Some unexpected result might happens along this chain. Effective behaviour depends from device hardware, driver and API Backend.

你能做什么:

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