标签: v4l2

v4l2非常简单的例子

我正在寻找一个使用V4L2在Linux中进行摄像头访问的简单示例.哪里可以找到它?尽可能简单.

谢谢,

c c++ linux v4l v4l2

20
推荐指数
2
解决办法
4万
查看次数

如何在Android中使用V4L或V4L2(适用于Linux的视频)?

Android Linux内核是否支持V4L或V4L2(适用于Linux的视频).如果没有,是否可以添加它?

android linux-kernel v4l v4l2

12
推荐指数
1
解决办法
1万
查看次数

在Linux上使用OpenCV捕获多个网络摄像头(uvcvideo)

我试图在Ubuntu 11.10上使用OpenCV 2.1同时从3台Logitech Webcam Pro 900设备流式传输图像.uvcvideo驱动程序会加载这些.

捕获两个设备工作正常,但有三个我遇到空间错误第三个:

libv4l2: error turning on stream: No space left on device
Run Code Online (Sandbox Code Playgroud)

我似乎遇到了这个问题:http: //renoirsrants.blogspot.com.au/2011/07/multiple-webcams-on-zoneminder.html我试图做怪癖= 128(或几乎任何其他两个权力的价值)技巧但无济于事.我还尝试了另一台带有两个USB 2.0集线器的机器,并将两个摄像头连接到一个,第三个摄像头连接到第二个,这导致了同样的问题.我大致如下初始化(使用N个摄像头,因此结果实际上放入STL向量):

cv::VideoCapture cap0(0); //(0,1,2..)
Run Code Online (Sandbox Code Playgroud)

并尝试捕获循环中的所有摄像机

cap0.retrieve(frame0);
Run Code Online (Sandbox Code Playgroud)

这适用于N = 2个摄像头.当我设置N = 3时,第三个窗口打开但没有图像出现,控制台被垃圾邮件充满了V4L2错误.同样,当我设置N = 2,并尝试打开第三个摄像头时说干酪(简单的网络摄像头捕获应用程序),这也不起作用.

现在变得很大但是:在通过启动三个实例尝试guvcview之后,我能够同时查看三个摄像头(在帧速率或相关方面没有问题),因此它似乎不是硬件问题.我认为我应该设置一些属性,但我不确定那是什么.我已经研究了MJPEG(这些相机似乎支持),但是没有成功设置这个属性,或者检测它们在运行时是从OpenCV启动它们的模式(yuyv?).

思考?

webcam opencv v4l2

12
推荐指数
3
解决办法
2万
查看次数

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

我在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的图像时打印零).

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

python linux webcam opencv v4l2

12
推荐指数
1
解决办法
2万
查看次数

使用Gstreamer从相机捕获h.264流

我正试图从/dev/video0带有Gstreamer 1.0 v4l2src元素的本地安装的Logitech C920相机捕获H264流.

v4l2-ctl --list-formats 表明相机能够提供H264视频格式:

# v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
        ...

        Index       : 1
        Type        : Video Capture
        Pixel Format: 'H264' (compressed)
        Name        : H.264

        ...
Run Code Online (Sandbox Code Playgroud)

但管道

# gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! video/x-h264, width=800, height=448, framerate=30/1 ! fakesink

一直给我not-negotiated (-4)错误:

/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstFakeSink:fakesink0.GstPad:sink: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-h264, …
Run Code Online (Sandbox Code Playgroud)

gstreamer h.264 v4l2

12
推荐指数
1
解决办法
4万
查看次数

OpenCV:无法设置视频捕获的分辨率

我在Ubuntu 12.04 64位上使用OpenCV 2.4.5.我希望能够设置Logitech C310网络摄像头的输入分辨率.相机支持最高1280x960(30fps),我可以在guvcview中以此分辨率观看视频.但OpenCV总是以640x480的速度获取视频.

在创建VideoCapture上限后立即尝试使用cap.set(CV_CAP_PROP_FRAME_WIDTH,1280)和cap.set(CV_CAP_PROP_FRAME_HEIGHT,960)更改分辨率无效; 在获取每个帧之前尝试立即设置它们会导致程序立即崩溃.我也不能用这种方法降低分辨率.我也收到错误"HIGHGUI ERROR:V4L/V4L2:VIDIOC_S_CROP".我认为这可能是相关的,因为它在创建VideoCapture时出现一次,并且当我尝试设置宽度和高度时出现一次(但奇怪的是,如果我尝试仅设置其中一个,则不会).

我知道我不是第一个遇到这个问题的人,但我还没有找到一个解决方案,经过谷歌搜索和搜索SO以及互联网上的其他地方(在我已经尝试过的许多事情中,无法获得的答案是这个StackOverflow问题:提高OpenCV中的摄像头捕获分辨率.这是OpenCV中的错误吗?如果是这样,这是一个相当明显的.

以下是展示问题的代码示例(只是OpenCV视频显示代码的修改版本):

#include <cv.h>
#include <highgui.h>
using namespace cv;

int main(int argc, char** argv)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
            return -1;

    cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);

    Mat image;
    namedWindow("Video", CV_WINDOW_AUTOSIZE);

    while(1)
    {
            // cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
            // cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
            cap >> image;

            imshow("Video", image);

            if(waitKey(10) == 99 ) break;
    }
    return 
}
Run Code Online (Sandbox Code Playgroud)

实际上,如上所述,我得到两个"HIGHGUI ERROR",我得到一个640x480输出.我知道160x120是我的相机支持的分辨率v4l2-ctl --list-formats-ext.如果我取消注释while循环中两个注释掉的行,程序会立即崩溃.

这些可能是相关的或有可能的解决方案:http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/,http://answers.opencv.org/question/30062/error-设置-分辨率的视频捕获装置/

opencv v4l v4l2 logitech

12
推荐指数
1
解决办法
2万
查看次数

Python OpenCV中的VideoCapture内存泄漏

我正在使用3个网络摄像头偶尔在OpenCV中拍摄快照.它们连接到相同的usb总线,由于usb带宽限制,它不能同时允许所有3个连接(降低分辨率允许最多2个同时连接,而且我没有更多的usb总线).

因此,每次我想拍摄快照时都必须切换网络摄像头连接,但这会在大约40个开关后导致内存泄漏.

这是我得到的错误:

libv4l2: error allocating conversion buffer
mmap: Cannot allocate memory
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument

Unable to stop the stream.: Bad file descriptor
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
libv4l1: error allocating v4l1 buffer: Cannot allocate memory
HIGHGUI ERROR: V4L: Mapping Memmory from video source error: Invalid argument
HIGHGUI ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.
OpenCV Error: Bad flag (parameter …
Run Code Online (Sandbox Code Playgroud)

python webcam opencv memory-leaks v4l2

11
推荐指数
1
解决办法
1937
查看次数

mmap物理上连续的内存

我可能在这里有一些误解,所以请耐心等待.

我写了一个从相机中捕捉图像的程序.mmap正如我在V4L2文档中找到的那样,我在相机和我的应用程序之间共享内存.这非常有效.现在我的处理器(它是TI的DM3730)也有一个DSP.我想使用DSP,但它需要物理连续的内存.TI提供分配内存的驱动程序.我的问题是,现在我失去了很多时间将mmap的内存复制到物理连续的内存中.有没有办法告诉mmap它本身不应该分配内存,但我告诉mmap使用我分配的内存.

让你知道我在做什么(当然有很多代码缺失,但我非常接近V4L2文档.我希望这足以理解我的问题):

//reserve physical contiguous memory
dsp_buffer      = Memory_alloc(buffer_length, &myParams); 

...
//reserve memory for buffer, but not contiguous
buffers[n_buffers].start =
     mmap (NULL ,                    /* start anywhere */
     buf.length,
     PROT_READ | PROT_WRITE ,  /* required */                               
     MAP_SHARED ,              /* recommended */
     fd, buf.m.offset);
Run Code Online (Sandbox Code Playgroud)

之后,每当帧准备就绪时,我将内存从非连续内存复制到连续内存中.

...
//wait until frame is ready in memory
r = select (fd + 1, &fds, NULL, NULL, &tv); 
...
//copy the memory over to the physically contiguous memory
memcpy(dsp_buffer,buffers[buf.index].start,size); 
... …
Run Code Online (Sandbox Code Playgroud)

c linux memory shared-memory v4l2

10
推荐指数
1
解决办法
3150
查看次数

V4L2绝对曝光设置(几乎)没有效果

我试图手动控制相机的曝光,但该设置只是短暂激活,但显然自动模式似乎仍然处于激活状态,正如我在相机图像上看到的那样。

我的相机有以下控件:

v4l2-ctl --list-ctrls-menus
                     brightness 0x00980900 (int)    : min=-127 max=128 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=30 step=1 default=15 value=15
                     saturation 0x00980902 (int)    : min=0 max=127 step=1 default=54 value=54
                            hue 0x00980903 (int)    : min=-180 max=180 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=20 max=250 step=1 default=88 value=88
                           gain 0x00980913 (int)    : min=0 max=10 step=1 default=0 value=0
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
                0: Disabled
                1: 50 Hz
                2: 60 Hz …
Run Code Online (Sandbox Code Playgroud)

webcam camera opencv v4l2

9
推荐指数
1
解决办法
1万
查看次数

V4L2的线程安全性如何?

除了2008年的这封电子邮件之外,我找不到V4L2的线程安全特性.它谈到了大内核锁,我猜现在已经消失了,对吧?

有没有人有这方面的最新信息?我可以ioctl(我正在考虑VIDIOC_DQBUFVIDIOC_QBUF)来自多个线程的相同V4L2文件描述符而不进行序列化吗?上面引用的讨论确实表明答案是依赖于驾驶员的,但我想我还是会问.

c c++ posix thread-safety v4l2

8
推荐指数
1
解决办法
939
查看次数