在Linux的OpenCV(通过Python):设置框架宽度/高度?(OpenCV (via pyt

2019-06-26 08:08发布

我在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时打印零)。

能撞了捕获的分辨率是我漂亮的关键任务,所以我非常感谢任何指针任何人都可以提供。

Answer 1:

从该文档 ,

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

在Linux上使用最新的CVS下载与FFmpeg中(如果使用并返回0的函数内容被隐藏)NB时,此功能目前什么都不做。



Answer 2:

我有同样的问题,因为你。 最终进入OpenCV的源和更改默认参数modules/highgui/src/cap_v4l.cpp ,线245-246和重建项目。

#define DEFAULT_V4L_WIDTH  1920
#define DEFAULT_V4L_HEIGHT 1080

这是OpenCV的2.4.8



Answer 3:

这似乎是由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支持会骂你。 如果我设置一个不支持原生分辨率,我有零次成功。



Answer 4:

不知道它的工作原理,但你可以尝试实例化对象的相机后的参数迫使你的价值观:

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)

这是一个有点哈克,因此预计崩溃。



Answer 5:

    ## 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)


文章来源: OpenCV (via python) on Linux: Set frame width/height?