v4l2采样usb摄像头并显示
ubuntu
思路:
1、 首先理解camera工作原理,重点理解 yuv,rgb视频流, 即Sensor数据输出的图像格式;
大体过程:光线通过镜头Lens进入摄像头内部,通过IR过滤掉红外光,抵达 sensor ,sensor 将光信号转为电信号,在通过ADC电路转为数字信号,此时的数据格式是RAW Data;
Sensor内的基带芯片进行加工,转换为RGB, YUV等格式输出;
最基础的是RAWData 数据, 而sensor最后输出的数据类型为RAW data, YUV, RGB,等数据流;
RGB和YUV都是对每一个感光点(像素点)的编码最后生成的图像流格式;
RAW Data 是最原始的图像数据流;
参考链接: https://www.cnblogs.com/fjutacm/p/220631977df995512d136e4dbd411951.html
2、 通过调用v4l2 视频接口,完成 usb摄像头视频帧的获取;确定当前图像是什么格式;(本人是YUV422);
3、 将视频帧数据落文件即可; (初步通过大小去验证yuv文件是否正确,红色字体),其他的暂时未知;
1 2 3 4 5 6 7 | devel@UAGVDU-PC:~ /Program/usb_camera $ ll test .yuv -rw-rw-r-- 1 devel devel 614400 7月 26 18:11 test .yuv devel@UAGVDU-PC:~ /Program/usb_camera $ . /v4l2_test -------VIDIOC_G_FMT------------ Frame fmt : width-640, height-480 , pixfmt-1448695129, field-1 ,sizeimage-614400 ---{ pixelformat = '' YUYV '' , description = '' YUYV 4:2:2 '' }--- The frame length=[614400] |
4、利用ffplay读取 .yuv文件,进行视频播放
1 | ffplay -f rawvideo -video_size 640*480 -pixel_format yuyv422 -i test .yuv |
1 2 | × -video_size 640*480 : 640×480 是设置捕获的usb摄像头的分辨率,此处应保持一致; × -pixel_format yuyv422 : 当前保存到文件的视频流帧格式; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了