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

Mik*_*nce 12 python linux webcam opencv v4l2

我在Linux(ubuntu 12.04)上通过python使用openCV,我有一个logitech c920,我想从中获取图像.奶酪能够获得高分辨率的帧,但每当我尝试使用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)
Run Code Online (Sandbox Code Playgroud)

但是这会在最后两行的每一行之后产生"0"的输出,并且当我随后通过以下方式获取帧时:

image = cv.QueryFrame(cam)
Run Code Online (Sandbox Code Playgroud)

生成的图像仍为640x480.

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

sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp
Run Code Online (Sandbox Code Playgroud)

我确实可以通过以下方式操纵相机的设置(再次,在python之外)

v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1
v4l2-ctl --set-parm=30
Run Code Online (Sandbox Code Playgroud)

并观察:

v4l2-ctl -V
Run Code Online (Sandbox Code Playgroud)

确实表明某些事情发生了变化:

Format Video Capture:
    Width/Height   : 1920/1080
    Pixel Format   : 'H264'
    Field          : None
    Bytes per Line : 3840
    Size Image     : 4147200
    Colorspace     : sRGB
Run Code Online (Sandbox Code Playgroud)

但是当我弹出python shell时,上面的代码表现与以前完全相同(在尝试设置属性并获得640x480的图像时打印零).

能够提高捕获的分辨率对我来说非常重要,所以我非常感谢任何人都可以提供的任何指针.

Sam*_*Sam 1

不确定它是否有效,但您可以在实例化相机对象后尝试将参数强制为您的值:

import cv
cam = cv.CaptureFromCAM(-1)

os.system("v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1") 
os.system("v4l2-ctl --set-parm=30")

image = cv.QueryFrame(cam)
Run Code Online (Sandbox Code Playgroud)

这有点 hacky,所以预计会发生崩溃。