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

本文共 1701 字,大约阅读时间需要 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://www.cnblogs.com/lknlfy/archive/2012/03/31/2426788.html

你可能感兴趣的文章
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt 创建异形窗体
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
linux 驱动开发 头文件
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>