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

cv2是如何产生的。VideoCapture()更改捕获分辨率?

鲁建茗
2023-03-14

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。视频捕获会改变分辨率。好的,所以它不关心v4l2 ctl写入的设置,并覆盖它自己的设置。所以我尝试;

camcapture.set(3,640)
camcapture.set(4,480)

图像是640x480的预期,但帧速率下降到30fps。这次它重写fps值。即使相机支持它,我也不能让它在640x480@60fps工作。

任何防止cv2的想法。VideoCapture覆盖v4l2-ctl写入设置?

共有2个答案

锺离宸
2023-03-14

为什么不尝试显式地询问想要的帧速率:

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更改了3个。个人简历CV\u CAP\u PROP\u FRAME\u WIDTH,可以帮助您阅读代码。。。

朱俊雅
2023-03-14

OpenCV自动选择第一个可用的捕获后端(请参见此处)。可能是因为它没有自动使用V4L2。

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

  • 我已经开发了一个2D侧滚动平台一段时间了。这是我的第一场正式比赛,快结束了。到目前为止,我还没有过多考虑过决议。 我的游戏是基于瓷砖的,大多数瓷砖和玩家精灵都是。尺寸为40x40像素的PNG文件。默认屏幕高度和宽度为1280x720。据我所知,现在的大多数游戏都有很多不同的分辨率选择和不同的纵横比。 我想给玩家几个分辨率的选择,比如800x600、1024x768和1280x720。这需要这样做,

  • 我想用我的相机拍摄1920x1080视频,但我遇到了两个问题 初始化视频捕获时,它会将宽度/高度更改为640/480 当我试图在cv2中更改宽度/高度时,图像变得混乱 当在cv2中设置1920x1080时,图像变成蓝色,底部有一个故障条 根据v4l2-ctl,事情是这样的。蓝色图像似乎不是像素格式变化的结果(例如。RGB至BGR) 最后,这里是一个以640x480拍摄的具有正确颜色的图像示例。代码

  • 我在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。创建视频捕获封盖后立即设

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

  • 我想改变视频分辨率从横向到纵向模式输出从我内置的摄像头在笔记本电脑(cv2.视频捕捉(0))。我试图重新缩放帧以使其工作,它确实进入肖像模式(高度大于宽度),但视频是倾斜/拉伸的。有办法解决这个问题吗?请帮忙。我使用opencv与python。