我在
linux(ubuntu 12.04)上通过
python使用openCV,我有一个我想要抓图像的logitech c920.奶酪能够抓住高分辨率的帧,但是每当我尝试使用openCV时,我只能获得640×480的图像.我努力了:
import cv cam = cv.CaptureFromCAM(-1) cv.SetCaptureProperty(cam,cv.CV_CAP_PROP_FRAME_WIDTH,1920) cv.SetCaptureProperty(cam,1080)
但是在最后两行之后,这会产生“0”的输出,当我随后通过以下方式获取一个帧时:
image = cv.QueryFrame(cam)
得到的图像仍然是640×480.
我已经尝试通过(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时,上述代码的行为与以前完全一样(尝试设置属性并获取640×480的图像时打印零).
能够提高捕获的分辨率对我来说是非常关键的,所以我非常感谢任何人都可以提供的任何指针.
解决方法
从
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).