没有合适的资源?快使用搜索试试~ 我知道了~
摄像头v4l2编写,实现视频在帧缓冲显示(非程序,文档资源)
需积分: 10 28 下载量 143 浏览量
2018-01-10
19:01:26
上传
评论
收藏 521KB PDF 举报
温馨提示
试读
16页
摄像头v4l2编写,实现视频在帧缓冲显示
资源推荐
资源详情
资源评论
随笔- 1 文章- 8 评论- 1
博客园 首页 新随笔 新文章 联系 管理 订阅
申明:该文档只是记录我的编写和理解过程,代码部分参考了较多的文
章,如有意见请联系我删除,谢谢。
目标:
使用v4l2提供API,完成摄像头视频采集,并使用帧缓存显示。
准备工作:
1. USB摄像头1个
2. 编译环境(我用的是PC+Ubuntu14.04)
3. 了解大概情况,查看如下网址,基本情况应该没问题了:
http://baike.baidu.com/item/V4L2?sefr=enterbtn
公告
昵称:
aquafly
园龄:
8个月
粉丝:
0
关注:
0
+
加关注
<
2017
年11
月
>
日 一 二 三 四 五 六
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3 4 5 6 7 8 9
搜索
找找看
谷歌搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
aquafly
摄像头v4l2编写,实现视频在帧缓冲显示
框架理解:
关键点理解:
摄像头采集的循环buf
必须使用循环buf,否则摄像头采集图像显示不会连续。
摄像头的分辨率和帧缓冲的分辨率
摄像头的分辨率和帧缓冲的分辨率不相同,不能套用同一个宽高,需
要区别对待,否则会导致显示花屏或其他未知后果。
yuyv转换rgb
yuyv:4个字节,表示2个像素(uv共用),也就是说一个像素2个
字节。
rgb24:3个字节,表示1个像素
rgb32:4个字节,表示1个像素
YUV到RGB的转换有如下公式:
我的标签
视频采集v4l2(1)
随笔分类
随笔
随笔档案
2017年2月 (1)
文章分类
android
arduino
qt(1)
嵌入式(1)
最新评论
1. Re:摄像头v4l2编
写,实现视频在帧缓冲
显示
enqueue.type =
V4L2_BUF_TYPE_VI
DEO_CAPTURE ;
dequeue.type =
V4L2_BUF_TYPE_VI
DEO_CAPTURE ;
enque......
--Honic
阅读排行榜
1. 摄像头v4l2编写,
实现视频在帧缓冲显示
(820)
R = 1.164*(Y-16) + 1.159*(V-128);
G = 1.164*(Y-16) - 0.380*(U-128)+ 0.813*(V-128);
B = 1.164*(Y-16) + 2.018*(U-128));
举例:一个yuyv的转换到rgb32如下:
1、先从yuyv中取出第一个像素点: y0 u v
2、可以用公式计算出 R0 G0 B0 的值。
3、组装成RGB32的第一个像素点: rgb32_0[4]=
{R0,G0,B0,0}
4、再从yuyv中取出第二个像素点: y1 u v (注意这里uv共用)
5、可以用公式计算出 R1 G1 B1 的值。
6、组装成RGB32的第二个像素点: rgb32_1[4]=
{R0,G0,B0,0}
搭建框架:
为了方便,全部代码都放到一个文件中。最好的方式是按功能拆分成
多个文件,这里为了理解方便,就不拆分了。
黑色是摄像头模块(v4l2) 蓝色是帧缓冲模块
1 void main()
2 {
3 //打开摄像头设备
4 open_cameral(MY_CAMERA);
5 //初始化帧缓冲
6 init_FrameBuffer();
7 //获取当前摄像头的格式信息
8 get_camInfo();
9 //设置用户需要的摄像头格式信息(分辨率和图形格式)
10 set_format();
11 //获取摄像头采集图片buf
12 get_buf();
13 //映射buf到用户空间
14 map_buf();
15 //开始采集
16 startcon();
17 while(1) //这里可以优化成select,就不会阻塞了
18 {
19 //获取采集到的数据
20 get_picture(bmp);
21 //把采集数据写入帧缓冲
22 write_data_to_fb(FrameBuffer, Frame_fd, bmp,
cam_width, cam_hight, Framebpp);
23 }
24
评论排行榜
1. 摄像头v4l2编写,
实现视频在帧缓冲显示
(1)
25 //停止采集
26 stopcon();
27 //解除映射
28 bufunmap();
29 //关闭帧缓冲
30 exit_Framebuffer();
31 //关闭摄像头设备
32 close_cameral();
33 }
具体实现:
摄像头模块
打开摄像头设备
这里为了通用,把摄像头设备路径作为入参传入。
1 //打开摄像头设备
2 int open_cameral(char* path)
3 {
4 fd=open(path,O_RDWR);
5 if (fd < 0) {
6 printf("Open /dev/video0 failed\n");
7 return -1;
8 }
9 }
一般usb摄像头,插入后,会直接生成设备文件:/dev/videox,
这里的x范围[0~n],表示第几个usb摄像头设备,我的测试环境由于只
有1个,所以是/dev/video0。
获取当前摄像头的格式信息
这里刚开始我也很困惑,这里获取摄像头信息有什么用。后面自己分
析了下,主要原因是获取当前摄像头支持的图片格式,防止后面设置的时
候设置不正确。
有些老式的摄像头,只有yuyv格式,后面采集就只能采集成yuyv格式,
再转换下。
剩余15页未读,继续阅读
资源评论
LouisGou
- 粉丝: 342
- 资源: 29
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python开发的口红色号识别程序+源码+开发文档+源码解析(毕业设计&课程设计&项目开发)
- TP-LINK TL-WN725N V3 Linux 驱动
- 020ssm-jsp-mysql班级同学录网站.zip(可运行源码+数据库文件+文档)
- 什么是stm32f103rct6,有哪些优缺点?
- 李明哲尚能2.zip
- 019ssm-jsp-mysql奥迪维修保养服务管理系统.zip(可运行源码+数据库文件+)
- AB测试数据-增设中小店铺广告位
- YOLOv8红外场景的车辆-行人-斑马线-交通灯检测+数据集+pyqt界面
- 基于JSP毕业设计-OA办公自动化系统-毕业设计.zip
- 基于JSP毕业设计-MVC设计模式应用之游戏卡在线销售系统(论文).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功