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

我正在使用openCV通过Linux上的Python(Ubuntu的12.04),我有一个Logitech C920我想抓取图像。 奶酪是能够抓帧到真正的高分辨率,但每当我尝试使用openCV,我只得到640×480图像。 我努力了:

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) 

生成的图像仍然是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 

但是,当我popup到pythonshell,上面的代码行为完全一样(尝试设置属性和获得640×480图像时打印零)。

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

Solutions Collecting From Web of "Linux上的OpenCV(通过python):设置帧的宽度/高度?"

从文档中 ,

函数cvSetCaptureProperty设置视频捕获的指定属性。 目前该功能仅支持视频文件:CV_CAP_PROP_POS_MSEC,CV_CAP_PROP_POS_FRAMES,CV_CAP_PROP_POS_AVI_RATIO。

注意:当使用FFMPEG在linux下进行最新的CVS下载时,这个函数目前什么都不做(如果使用0并且返回,则函数内容被隐藏)。

我和你有同样的问题。 结束进入OpenCV源代码并更改modules/highgui/src/cap_v4l.cpp的默认参数,第245-246行,重建项目。

 #define DEFAULT_V4L_WIDTH 1920 #define DEFAULT_V4L_HEIGHT 1080 

这是OpenCV 2.4.8

Cammera似乎是可变的。

AFIK,罗技相机有特别糟糕的Linux支持(虽然它变得更好)他们的大部分问题都与焦点控制等高级功能。 我会建议坚持使用基本的相机(IE手动对焦罗技相机)只是为了安全起见。

我内置的笔记本电脑相机没有问题,并以正常的分辨率显示。
我的外部Logitech亲有问题的活化。

但是,我可以用这两行来解决这个问题。

是的,他们和你用的一样。

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

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

请确保您设置的分辨率是由您的相机支持,否则v4l会对您大喊。 如果我设置不支持的本地分辨率,我没有成功。

不知道它是否工作,但您可以尝试实例化相机对象后强制参数为您的值:

 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) 

这有点哈克,所以期待一个崩溃。

  ## Sets up the camera to capture video cap = cv2.VideoCapture(device) 

宽度= 1280,高度= 720

 #set the width and height cap.set(3,width) cap.set(4,height)