当前位置: 首页 > 知识库问答 >
问题:

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

邬宏扬
2023-03-14

我想用我的相机拍摄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个答案

姚雅珺
2023-03-14

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

  1. 640x480
  2. 1920x1080

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

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

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

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

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

 类似资料:
  • 我遇到的问题是,我无法更改OpenCV视频捕获的分辨率。不管怎样,分辨率总是640x480。我使用的代码是用C编写的,我使用的是opencv 3.4.8。我已经创建了一个超级简单的程序来做这件事,不管我怎么尝试,它似乎都不起作用。 以下是完整的代码: 当我运行上述代码时,帧总是640x480。 我已尝试使用

  • 我正在OpenCV(2.4.8)中创建一个程序,可以读取视频文件并对其进行计算。对于这些计算,我不需要高分辨率的帧,我可以用640*360作为分辨率。 在早期的测试中,我连接了网络摄像头,我使用了: 它完美地调整了图像的大小。现在,我要进入下一步,我想用我的程序来存储视频,而不是一个实时提要(我用来测试)。当我用源文件路径(字符串)更改“0”时,将加载文件,但分辨率仍为1920*1080。 我做错

  • 我在Ubuntu 12.04 64位上使用OpenCV 2.4.5。我希望能够设置我的罗技C310网络摄像头输入的分辨率。相机支持高达1280x960在30fps,我能够在guvcview在这个分辨率查看视频。但是OpenCV总是以640x480的速度获取视频。 试图用cap更改分辨率。设置(CV\U CAP\U PROP\U FRAME\U WITH,1280)和CAP。创建视频捕获封盖后立即设

  • 我正试图从ip摄像机捕捉视频,并保存为avi视频文件。同时脚本将包含人脸的帧保存为jpeg文件。当脚本执行这些任务时,cpu使用率约为100%。正因为如此,我只想限制人脸检测的帧率。

  • cv2无法设置fps,但我可以使用更改fps; 和决议; 但是当我尝试去做的时候; 捕获速度为60fps,但分辨率为320x240。很明显,cv2。视频捕获会改变分辨率。好的,所以它不关心v4l2 ctl写入的设置,并覆盖它自己的设置。所以我尝试; 图像是640x480的预期,但帧速率下降到30fps。这次它重写fps值。即使相机支持它,我也不能让它在640x480@60fps工作。 任何防止cv

  • 我正在使用Androidncoder生成一个带有AAC音频的H264视频,通过RTMP网络发送,并使用MediaMuxer本地存储在MP4文件中。 广播在RTMP上运行良好,但在本地保存时,生成的视频有时还可以,有时只是带有声音的黑色帧(或者只是带有一些信息块的第一部分帧),有时它先播放音频,然后以随机FPS速度播放视频。 这是我的Muxer包装器类和MPEG4Writer SDK类显示的输出: