我在Linux上通过Python使用的OpenCV(Ubuntu的12.04),我有一个罗技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。
我试着安装了似乎通过(外蟒)进行相关的工具:
sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp
我的确可以通过明显操纵相机的设置(再次,蟒蛇外):
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壳,上面的代码行为完全与以前一样(试图设置的属性,并获得图像即为640x480时打印零)。
能撞了捕获的分辨率是我漂亮的关键任务,所以我非常感谢任何指针任何人都可以提供。
从该文档 ,
该功能cvSetCaptureProperty设置视频采集的指定属性。 目前该功能仅支持视频文件:CV_CAP_PROP_POS_MSEC,CV_CAP_PROP_POS_FRAMES,CV_CAP_PROP_POS_AVI_RATIO。
在Linux上使用最新的CVS下载与FFmpeg中(如果使用并返回0的函数内容被隐藏)NB时,此功能目前什么都不做。
我有同样的问题,因为你。 最终进入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支持(虽然它; S变得更好)他们大部分的问题都具有先进的功能,如对焦控制。 我会建议与基础照相机(IE手动对焦摄像头罗技)坚持只是发挥它的安全。
我的笔记本摄像头内置有在普通分辨率没有问题,并显示。
我的外部罗技Pro有initalizing问题。
不过,我可以克服这两条线的解析问题。
是的,它们是您所使用的相同。
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_HEIGHT, 720)
我的罗技仍然抛出错误,但分辨率是好的。
请确保您设置的分辨率是通过相机或为v41支持会骂你。 如果我设置一个不支持原生分辨率,我有零次成功。
不知道它的工作原理,但你可以尝试实例化对象的相机后的参数迫使你的价值观:
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)