使用ffmpeg获取一帧摄像头数据

2023-11-09

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

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <fcntl.h>
 5 #include <unistd.h>
 6 
 7 #include <libavformat/avformat.h>
 8 #include <libavcodec/avcodec.h>
 9 #include <libavdevice/avdevice.h>
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格式查看软件看下效果:

   

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ffmpeg获取一帧摄像头数据 的相关文章

  • 实现一个简单的二叉树

    实现一个简单的二叉树 语言 Objective C 整体上还是挺简单的 所以就直接上代码了 1 二叉树 由 节点 和 枝干 组成 且每个节点最多只有两个子节点的树形数据结构 2 代码实现 2 1 节点类 创建一个简单的节点类 这个类可以保存
  • Chatopera王海良:大厂螺丝钉还是开源极客?年轻技术人如何选择?

    他因为追求创新毅然放弃了大厂稳定的工作 参与开源并成立了开源商业公司 他相信 开源可以极大地助力开发者成长 那么 对于年轻开发者而言 如何通过参与开源实现跳跃式发展 本期 开源访谈录 邀请到了Chatopera CEO王海良来分享他的见解
  • 手把手教会你用Python爬虫爬取网页数据!!

    其实在当今社会 网络上充斥着大量有用的数据 我们只需要耐心的观察 再加上一些技术手段 就可以获取到大量的有价值数据 这里的 技术手段 就是网络爬虫 今天就给大家分享一篇爬虫基础知识和入门教程 什么是爬虫 爬虫就是自动获取网页内容的程序 例如
  • IAR编译错误

    1 错误提示 Error e104 Failed to fit all segments into specified ranges Problem discovered in segment XDATA N Unable to place
  • Linux命令·cp

    cp命令用来复制文件或者目录 是Linux系统中最常用的命令之一 一般情况下 shell会设置一个别名 在命令行下复制文件时 如果目标文件已经存在 就会询问是否覆盖 不管你是否使用 i参数 但是如果是在shell脚本中执行cp时 没有 i参
  • 机器学习中最基本的概念之一:数据集、样本、特征和标签

    本文重点 数据集 样本 特征和标签是机器学习中的重要概念 这些概念在机器学习算法的设计和实现过程中起着至关重要的作用 在本文中 我们将对这些概念进行详细的讲解 以便更好地理解机器学习算法的基本原理和应用 一 数据集 数据集是机器学习中最基本
  • python3 requests https 请求 报 SSLContext 相关递归错误

    一 错误信息 2019 11 19 15 14 40 Provider before requests post 2019 11 19 15 14 41 error infoTraceback most recent call last F
  • iOS开发捷径学习(一)

    结合 iOS开发捷径学习 这本书 分几章系统梳理Interface Builder相关知识 整体现状 iOS界面的开发 主要是采用纯代码和Interface Builder来进行 苹果开发初期面临很少的可用内存 纯代码进行UI的绘制自己控制
  • wordpress开启子目录多站点模式并给子站绑定独立域名

    wordpress开启子目录多站点模式并 wordpress开启多站点模式 多站点模式即是使用一套wordpress程序就可以搭建多个独立 互不干扰的wordpress站点 各站点之间的用户 文章 附件等都互不干预 wordpress的多站
  • 论文阅读-DFN: Dynamic Filter Networks-动态卷积网络

    一 论文信息 论文名称 Dynamic Filter Networks 作者团队 NIPS2016 二 动机与创新 卷积层是通过将上一层的特征映射与一组过滤器进行卷积计算输出特征映射 滤波器是卷积层的唯一参数 通常用反向传播算法在训练中学习
  • 天地图专题二:在天地图上循环显示标注点以及悬停显示信息窗口

    上一文章讲了如何加载天地图 其实是很简单的 只要看一下天地图官方的代码示例就能搞出来 只是为了保持文章系列的完整性 所以才写了出来 官方api http api tianditu com api new webIndex html 这一文章
  • 我的笔记本电脑键盘左ctrl键和fn键功能互换了

    进入BIOS设置 Device Option中将Swap Fn Ctrl Key的属性设为Disabled
  • 轻量级域名解析服务器之dnsmasq

    1 dnsmasq的简介 dnsmasq提供DNS缓存和DHCP服务功能 作为域名解析服务器 DNS dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度 作为DHCP服务器 dnsmasq可以用于为局域网电脑分配内网ip地址
  • Python基础3.3--for循环

    首先来说下for循环 for循环是python语言的循环控制语句 for循环可以遍历任何序列的项目 包括序列集合或可迭代对象 如列表 字符串 元组 字典等 看下基本语法 for 变量 in 序列 变量为任意值 序列为列表 元组 字符串等 子
  • Go For Web:一篇文章带你用 Go 搭建一个最简单的 Web 服务、了解 Golang 运行 web 的原理

    前言 本文作为解决如何通过 Golang 来编写 Web 应用这个问题的前瞻 对 Golang 中的 Web 基础部分进行一个简单的介绍 目前 Go 拥有成熟的 Http 处理包 所以我们去编写一个做任何事情的动态 Web 程序应该是很轻松
  • Java中的float浮点数的二进制存储及运算

    float在内存中的数据格式及其转byte数组原理及转换过程 float在计算机的存储 四个字节 共有32位 以 符号 移位数 底数 的方式存储 三者的计算 第一位是符号 往后8位是 移位数 再往后23位是 底数 32位的格式排列就是 AB
  • SpringBoot使用 @Async实现优雅的异步调用

    点击关注 Java基基 2022 04 09 11 50 收录于话题 Java基基908个 点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 每天 14 00 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 20
  • SQL2000 函数递归显示路径

    Author htl258 Tony Date 2011 05 19 17 25 59 Version Microsoft SQL Server 2008 RTM 10 0 1600 22 Intel X86 Jul 9 2008 14 4

随机推荐

  • git学习记录4-----更改提交操作

    git学习记录4 更改提交操作 回溯历史版本 回溯到feature A之前 创建fix B 推进至feature A后的状态 合并fix B 查看冲突部分并将其解决 提交解决后的结果 修改提交信息 下次见 回溯历史版本 回溯到feature
  • useEffect默认执行两次解决方法

    转自 https blog csdn net SJJ980724 article details 126144594 代码如下 useEffect gt console log useEffect调用了 刷新页面初始化打印发现 useEff
  • spring集成web环境(配置全局参数、web.xml配置监听器)

    配置全局参数 全局参数主要是为了解耦 位置 web WEB INF web xml
  • 计算机进入系统黑屏,电脑进入系统后黑屏,教您电脑进入系统后黑屏怎么办

    在使用电脑的过程中 方便我们的同时 也会出现很多问题 比如说曾经遇到过这样的问题 打开电脑 显示几个开机字样之后 电脑就黑屏了 这时仅仅能看到一个可移动的鼠标光标 怎么办 下面 小编就跟大伙介绍电脑进入系统后黑屏的修复方法 现代社会 电脑已
  • MySql的JDBC连接url地址的各项配置说明及所解决的问题

    首先看一条jdbc的url地址 url jdbc mysql 127 0 0 1 3306 test useAffectedRows true autoReconnect true useUnicode true characterEnco
  • CSS之行高(line-height)详解

    行高 line height 1 浏览器中默认文字大小为16px 2 浏览器中默认文字行高为18px 行高 文字大小 上下间距 1 通过设置文字的行高 改变的就是文字的上下间距 2 如果不设置行高 文字的大小可以影响行高值 3 文字的字体也
  • VMware vCenter Server 7.0.3 安装

    VMware vCenter Server 7 0 3 安装 文章目录 VMware vCenter Server 7 0 3 安装 1 安装 vcenter 1 1 第一阶段 1 2 第二阶段 2 exsi 查看 vcenter 3 部署
  • TiKV源码分析(一)RaftKV层

    关于TiDB与TiKV学习总结 本章序 关于RaftStore层 从RaftBatchSystem开始 状态机做了什么 mailbox注册与tx rx通道设置 消息收发与处理 Peer中的具体操作 Apply中的具体操作 一些琐碎信息 本章
  • 数据结构-栈的顺序存储结构(C++实现)

    目录 1 声明栈的结构体 2 初始化栈顶 3 添加元素至栈顶 4 删除栈顶元素 5 显示栈 整段代码 1 声明栈的结构体 结构体内声明一个data用来存放栈数据 top用来指向栈顶 typedef int ElemType typedef
  • 关于SOC、态势感知,5种常见的关联分析模型

    引言 在很多安全分析类产品建设的过程中都会涉及到关联分析 比如日志分析 soc 态势感知 风控等产品 关联分析可以认为是这类产品中最核心的能力之一 这个东西从名字上看就知道 千人千面 每个人的想法和理解都不一样 很多甲方都会提关联分析 但你
  • vue 路由切换动画(滑入,滑出效果)

    最近做的一个小项目 需要做路由切换 页面滑入滑出的效果 总结下实现的思路和方法 router view 用 transition 标签包裹 router view 组件 动态添加动画名 data 里定义transitionName变量
  • 四种访问修饰符

    Java中修饰符分为两种 访问修饰符和非访问修饰符 修饰符中 有一些修饰符可以既可以修饰类 也可以修饰方法 但是有一些修饰符只能修饰符方法 今天这篇文章先介绍一下四种访问修饰符 1 private修饰符 private表示私有的 既然是私有
  • C++ 大话设计之《简单工厂模式》(优缺点,设计原理,常用场景)

    简单工厂是一种创建型模式 优点 简单工厂模式能够提高生产效率和生产力 缺点 简单工厂模式将所有产品的创建逻辑集中在一个工厂类中 一旦这个工厂类出现问题 整个系统都会受到影响 如果要添加新的产品类 需要修改工厂类的代码 违反了开闭原则 对扩展
  • 史上最全的2023年最新版Android面试题集锦(含答案解析)

    前言 又到了一年的金三银四黄金求职季 虽说今年以来 经济回暖 但行业岗位缺口紧缩的趋势恢复还需一段时间 尤其对于Android开发而言 想要跳槽到一个高薪岗位更是难上加难 因此 想要杀出重围 必然要有万全的准备 除了一份美观的简历 还必须刷
  • 这梦想笑开了花---Day15

    题记 散尽这满腔的爱和忧伤 任这一往无前的气势澎湃 我在这 要走下去 转正快要一个月了 来这博客也有半个月了 算是在这个行业入了门 每天的忙碌略感疲惫 但这白天公司里编写后台的代码 晚上回家自己钻研着前端的开发 倒也乐此不疲的享受着 有朋友
  • C++STL之list容器

    一 list特性 list为带哨兵位双向循环链表 支持任意位置的插入和删除 与 array vector deque 相比 list的移除元素效率更高 最大缺陷是不支持 重载 不支持随机访问 只能通过迭代器进行线性开销的迭代 二 list的
  • 创建窗口

    工作涉及到了opengl的boom的demo 看到了learn opengl中有 所以 从头学起 顺便记录下 链接https learnopengl cn readthedocs io zh latest 01 20Getting 20st
  • GAN,IGBT, MOSFET

    作者 集微网 校对 团团 集微网 爱集微APP 各大主流应用商店均可下载 集微网消息 功率半导体是电子电力装置电能转换与电路控制的核心器件 根据Yole数据 中国已经成为全球最大的功率半导体消费市场 预计至2021年 全球功率器件市场规模将
  • Substance designer 瓦片贴图制作

    瓦片贴图制作 因为最终在unity应用 所以采用BaseColor Metallic Roughness Normal Height贴图的工作流程 对于瓦片的细节上 可以分为 基色 上下两种 污渍 水渍 苔藓 裂痕 如果你研究Substan
  • 使用ffmpeg获取一帧摄像头数据

    最近在研究FFmpeg 比较惊讶的是网上一大堆资料都是在说如何从已有的视频中截取一帧图像 却很少说到如何直接从摄像头中捕获一帧图像 其实我一直有个疑问 就是在Linux下 大家是用什么库来采集摄像头的 opencv 还是自己写v4l2的代码