Linux上的OpenCV(通过python):设置帧宽度/高度?

2024-05-17 00:37:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在linux上通过python使用openCV(ubuntu 12.04),我有一个logitech c920,我想从中获取图像。Cheese能够抓取高分辨率的帧,但是每当我尝试使用openCV时,我只能得到640x480个图像。我试过:

import cv
cam = cv.CaptureFromCAM(-1)
cv.SetCaptureProperty(cam,cv.CV_CAP_PROP_FRAME_WIDTH,1920)
cv.SetCaptureProperty(cam,cv.CV_CAP_PROP_FRAME_WIDTH,1080)

但这会在最后两行之后产生“0”的输出,当我随后通过以下方式获取帧时:

image = cv.QueryFrame(cam)

结果图像仍然是640x480。

我试过通过(在python之外)安装看似相关的工具:

sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp

显然,我可以通过以下方式操纵相机的设置(同样,在python之外):

v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1
v4l2-ctl --set-parm=30

并注意到:

v4l2-ctl -V

事实上,这表明发生了一些变化:

Format Video Capture:
    Width/Height   : 1920/1080
    Pixel Format   : 'H264'
    Field          : None
    Bytes per Line : 3840
    Size Image     : 4147200
    Colorspace     : sRGB

但当我跳入python shell时,上面的代码的行为与之前完全相同(在尝试设置属性并获得640x480的图像时打印零)。

能够提高捕获的分辨率对我来说是非常关键的任务,因此我非常感谢任何人能够提供的任何指针。


Tags: 图像format方式widthframeopencvcvctl
3条回答

它似乎是由cammera改变的。

AFIK、Logitech相机对linux的支持特别差(尽管它变得更好了),但它们的大多数问题都与诸如焦点控制之类的高级功能有关。我建议坚持使用基本相机(如手动对焦罗技相机)只是为了安全起见。

我的内置笔记本电脑摄像头没有问题,并以正常分辨率显示。
我的外部logitech pro在初始化时有问题。

不过,我可以用这两条线来克服解决问题。

是的,和你用的一样。

cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_HEIGHT, 720)

我的罗技仍然抛出错误,但解决方案是好的。

请确保您设置的分辨率是由您的相机支持的,否则v4l会对您大喊大叫。如果设置了不受支持的本机解析,则不会成功。

我和你有同样的问题。最后进入OpenCV源代码,在第245-246行的modules/highgui/src/cap_v4l.cpp中更改默认参数并重新生成项目。

#define DEFAULT_V4L_WIDTH  1920
#define DEFAULT_V4L_HEIGHT 1080

这是为OpenCV 2.4.8准备的

the docs

The function cvSetCaptureProperty sets the specified property of video capturing. Currently the function supports only video files: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO .

NB This function currently does nothing when using the latest CVS download on linux with FFMPEG (the function contents are hidden if 0 is used and returned).

相关问题 更多 >