首页 > 其他分享 >使用V4L2命令获取一帧摄像头源数据

使用V4L2命令获取一帧摄像头源数据

时间:2023-11-12 14:23:12浏览次数:27  
标签:一帧 -- Interval Discrete fps V4L2 摄像头 Size

使用V4L2命令获取一帧摄像头源数据

1. 介绍

V4L2是Linux下的视频设备驱动框架,它提供了一套统一的接口,使得应用程序可以通过统一的接口访问各种视频设备。

下面介绍如何使用V4L2命令获取一帧摄像头源数据。

2. 使用V4L2命令获取一帧摄像头源数据

2.1. 获取摄像头设备名称

使用v4l2-ctl --list-devices命令获取摄像头设备名称,如下所示:

$ sudo v4l2-ctl --list-devices
Integrated Camera: Integrated C (usb-0000:0b:00.0-2):
        /dev/video0     # 我们需要的摄像头设备名称
        /dev/video1
        /dev/video2
        /dev/video3
        /dev/media0
        /dev/media1

2.2. 获取摄像头格式

使用v4l2-ctl --list-formats-ext命令获取摄像头格式,如下所示:

$ sudo v4l2-ctl --list-formats-ext -d /dev/video0
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x180
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 424x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 848x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 960x540
                        Interval: Discrete 0.033s (30.000 fps)
        [1]: 'YUYV' (YUYV 4:2:2)    # 我们需要的摄像头格式,既单引号里的内容
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x180
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 424x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 848x480
                        Interval: Discrete 0.050s (20.000 fps)
                Size: Discrete 960x540
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1280x720     # 我们需要的摄像头分辨率
                        Interval: Discrete 0.100s (10.000 fps)

比如,上面的输出表示摄像头支持MJPGYUYV两种格式,单引号里面的是格式名称,括号里面的是格式描述,比如MJPG格式是Motion-JPEG, compressed,表示MJPG格式是压缩的Motion-JPEG格式。我们选择YUYV格式。

2.3. 获取摄像头图像

使用下面的命令,获取摄像头图像:

$ v4l2-ctl --stream-mmap --stream-count=1 -d /dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=YUYV --stream-to=output.yuv

若无权限,可使用sudo命令,如下所示:

$ sudo v4l2-ctl --stream-mmap --stream-count=1 -d /dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=YUYV --stream-to=output.yuv

下面是命令的详细说明:

  • --stream-mmap:使用mmap方式获取摄像头图像数据,也就是说,摄像头图像数据会被映射到用户空间,用户空间可以直接访问摄像头图像数据。
  • --stream-count=1:获取一帧摄像头图像数据。
  • -d /dev/video0:指定摄像头设备名称。这个名称可以通过v4l2-ctl --list-devices命令获取。
  • --set-fmt-video=width=1280,height=720,pixelformat=YUYV:指定摄像头图像格式,这里我们选择YUYV格式,分辨率为1280x720
    • 注意,这里的格式必须一一对应。
  • --stream-to=output.yuv:将摄像头图像数据保存到output.yuv文件中。

3. 查看摄像头图像

3.1 使用ffmpeg命令查看摄像头图像

使用ffmpeg命令查看摄像头图像,如下所示:

$ ffmpeg -pix_fmt yuyv422 -s 1280x720 -i output.yuv result.jpg

此命令将output.yuv文件转换为result.jpg文件。注意对应的参数要和上面的命令一一对应。

可以使用ffmpeg -pix_fmts命令查看ffmpeg支持的格式

3.2 在Windows下查看摄像头图像

在Windows下查看摄像头图像,可以使用7yuv软件(http://datahammer.de/)。

打开软件后,点击File->Open,选择output.yuv文件打开。设置FormatYUV422 YUYVWidth1280Height720。此时,就可以看到摄像头图像了。

注意:这里均假设摄像头图像格式为YUYV,分辨率为1280x720。如果不是这样,需要根据实际情况修改命令参数。
比如我是用了一个Bayer RG10格式的摄像头,这时上面的对应的位置都要更换。7yuv这个软件也可以查看Bayer类型的图像,但是没有我需要的RG10的格式,因此如果你也是这种格式,注意除了Format要设置为Bayer RGGB 16-bitWidthHeight要设置为摄像头的分辨外,还要设置Bits10或更低。

特此记录!
如有错误,欢迎指正!

标签:一帧,--,Interval,Discrete,fps,V4L2,摄像头,Size
From: https://www.cnblogs.com/BryceAi/p/17827127.html

相关文章

  • Linux MIPI 摄像头驱动框架编写(RN6752解码芯片)
    一、概述在编写MIPI摄像头驱动之前,需要先了解Media子系统的链路关系,这里我就不介绍了,需要的看我之前的笔记:LinuxMedia子系统链路分析。理解Media子系统链路关系后,会发现ISP不论是在摄像头端,还是集成在SOC中,驱动程序都是差不多的。多观察一下开发板中的其他案例,便会......
  • LiteCVR接入监控摄像头后,有视频流无丢包现象,视频无法播放是什么原因?
    随着科技的进步,视频监控系统的存储方式将越来越多地转向云端存储,使得视频数据可以实现集中管理和远程访问。同时,结合大数据分析,可以从海量的视频数据中挖掘有价值的信息和模式,为安全管理、城市规划等领域提供参考依据。有用户反馈,LiteCVR接入设备后,视频无法播放。我们立即对该情......
  • JS 怎么获取视频第一帧作为封面图?
    要获取视频的第一帧作为封面图,你可以使用HTML5的<video>元素和JavaScript来实现。下面是一个简单的步骤:在HTML中,创建一个<video>元素,并设置视频的路径或URL:<videoid="myVideo"src="path/to/video.mp4"width="320"height="240"></video>在JavaScript中,......
  • 智能安全帽_EIS智能防抖摄像头4G定位生命体征监测气体检测
    智能安全帽是一种集成了多种智能功能的设备,可以在工作场景中提供全方位的安全保障和高效管理。它具备实时定位、语音对讲、健康监测和AI智能预警等多种功能,能够协助工人进行工作并提高安全保障水平。智能安全帽的应用范围越来越广泛,包括建筑、钢铁、能源、采矿、电力、通信和交......
  • ArmSom--摄像头开发指南(二)
    一.简介RK3588从入门到精通开发板:ArmSoM-W3Kernel:5.10.160OS:Debian11上篇文档介绍了rockchip平台怎么配置MIPI-CSI的通路,本⽂主要介绍在Rockchip平台下Camera相关测试命令  二.摄像头连接ArmSoM-W3开发板与imx415连接图如下: w3-camera-hardware注意......
  • ArmSom--摄像头开发指南(二)
    一.简介RK3588从入门到精通开发板:ArmSoM-W3Kernel:5.10.160OS:Debian11上篇文档介绍了rockchip平台怎么配置MIPI-CSI的通路,本⽂主要介绍在Rockchip平台下Camera相关测试命令二.摄像头连接ArmSoM-W3开发板与imx415连接图如下:w3-camera-hardware注意排线的金属......
  • ArmSom--摄像头开发指南(一)
    一.简介RK3588从入门到精通开发板:ArmSoM-W3Kernel:5.10.160OS:Debian11本⽂主要介绍在Rockchip平台下Camera相关代码配置,MIPI-CSI调试的通路解析 名词解释:CSI(CameraSerialInterface):主机处理器与摄像头模块之间的高速串行接口DSI(DisplaySerial......
  • 大华摄像头添加到海康录像机设置
                                         大华摄像头添加到海康录像机设置1、大华摄像头设置  开启ONVIF协议,或者叫开放协议 如果用户管理有ONVIF用户,可以单独添加2、海康录像机设置IP通道点......
  • 海康摄像头添加到大华录像机设置
                                              海康摄像头添加到大华录像机设置1、摄像头端设置高级配置-集成协议勾选启用集成协议添加用户名和密码2、录像机端设置厂商选择:ONVIF协议......
  • Linux获取摄像头VID,PID的两种方式
    第一种方式,是直接查询设备的vid、pid文件,来获取vid,pid第二种方式,是查询设备信息,自己去解析对应的vid和pid 正常情况下,第一种方式就可以了,但是今天遇到一个ARM架构的kylin系统,通过第一种方式来查询设备ID,报错,无vendor这个文件,然后看了下是否有其他的文件包含的有设备信息,发现有......