博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用FFmpeg捕获一帧摄像头图像
阅读量:6908 次
发布时间:2019-06-27

本文共 1652 字,大约阅读时间需要 5 分钟。

        最近在研究FFmpeg,比较惊讶的是网上一大堆资料都是在说如何从已有的视频中截取一帧图像,却很少说到如何直接从摄像头中捕获一帧图像,其实我一直有个疑问,就是在Linux下,大家是用什么库来采集摄像头的(opencv?)?还是自己写v4l2的代码来实现?我之前一直都是用v4l2来采集摄像头的。经过一些时间的研究,最后成功地用FFmpeg实现了从摄像头采集一帧图像,实现代码也非常简单。不多说,上代码。

 

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 #include
8 #include
9 #include
10 11 12 void captureOneFrame() 13 { 14 AVFormatContext *fmtCtx = NULL; 15 AVFormatParameters inputFmtParameter; 16 AVPacket *pcaket; 17 18 //输入格式(V4L2) 19 AVInputFormat *inputFmt = av_find_input_format ("video4linux2"); 20 if (inputFmt == NULL) 21 { 22 printf("can not find_input_format\n"); 23 return; 24 } 25 26 memset (&inputFmtParameter, 0, sizeof(inputFmtParameter)); 27 //采集图像的高度 28 inputFmtParameter.height = 240; 29 //采集图像的宽度 30 inputFmtParameter.width = 320; 31 32 //打开摄像头设备 33 if (av_open_input_file ( &fmtCtx, "/dev/video0", inputFmt, 34 sizeof(inputFmtParameter),&inputFmtParameter) < 0) 35 { 36 printf("can not open_input_file\n"); 37 return; 38 } 39 //从摄像头获取一帧图像 40 av_read_frame(fmtCtx, pcaket); 41 //输出图像的大小 42 printf("data length = %d\n",pcaket->size); 43 44 FILE *fp; 45 //打开(新建)文件 46 fp = fopen("out.yuv", "wb"); 47 if (fp < 0) 48 { 49 printf("open frame data file failed\n"); 50 return ; 51 } 52 //将数据写入文件 53 fwrite(pcaket->data, 1, pcaket->size, fp); 54 //关闭文件 55 fclose(fp); 56 57 //关闭设备文件 58 av_close_input_file(fmtCtx); 59 } 60 61 62 int main() 63 { 64 avcodec_init(); 65 avcodec_register_all(); 66 avdevice_register_all(); 67 68 captureOneFrame(); 69 70 return 0; 71 }

   注意:采集出来的图像的是YV12格式的。用YUV格式查看软件看下效果:

   

 

 

 

转载地址:http://xigdl.baihongyu.com/

你可能感兴趣的文章
各种排序(数据结构复习之内部排序算法总结)
查看>>
哈夫曼树与哈夫曼编码
查看>>
迪士尼研究院用深度学习打造语音动画,让VR社交更真实
查看>>
css3 Gradients 线性渐变
查看>>
公安部科信局及各省(市)领导莅临品高参观指导
查看>>
富士通加入AI竞赛
查看>>
解析广泛应用于NLP的自注意力机制(附论文、源码)
查看>>
[转载]最锋利的Visual Studio Web开发工具扩展:Web Essentials详解
查看>>
联想和Wikitude联合推出AR云平台,为工业提供一站式解决方案
查看>>
Veeam和Nutanix加速数字化转型,致力企业级业务永续
查看>>
不要在界面上对数据库进行改动
查看>>
自动驾驶领域AI芯片新势力盘点
查看>>
[windows]快速从ftp下载最新软件包的批处理脚本
查看>>
Linux 信号signal处理函数
查看>>
Cisco 2900xl/3500xl/2950/3550密码恢复流程
查看>>
c++ 多线程写日志的一个很实用的日志类源码(支持 c++ builder)
查看>>
推荐系统设计
查看>>
Nginx https证书部署
查看>>
java的NIO和AIO
查看>>
Struts.xml中Action的method与路径的三种匹配方法
查看>>