FFmpeg AVFrame 初始化 Opencv Mat

FFmpeg的AVFrame数据转换到OpenCV Mat中 使用FFmpeg的视频解码功能,可以接受rtsp 的H264码流,得到YUV数据; 解码后的数据放在AVFrame 结构中, 可参考雷神的博客https://blog.youkuaiyun.com/leixiaohua1020/article/details/14214577 现将YUV数据转到Mat中 AVFrame *frame; ... 阅读详情

Opencv 加载ffmpeg 视频帧


#概要

avframe->data = rgbBuffer = img_1->data;

#AVframe 转换

//AVframe 初始化  YUV需要转为BGR24
    pFrameRGB = av_frame_alloc();
    rgbNumBytes = av_image_get_buffer_size(AV_PIX_FMT_BGR24, dec_ctx->width, dec_ctx->height, 1);
    rgbBuffer = (unsigned char*)av_malloc(rgbNumBytes);
    ret = av_image_fill_arrays(pFrameRGB->data, pFrameRGB->linesize, rgbBuffer,
        AV_PIX_FMT_BGR24, dec_ctx->width, dec_ctx->height, 1);

    if (ret < 0) {
        av_log(NULL, AV_LOG_ERROR, "av_image_fill_arrays failed, error num is %d\n", ret);
        goto failure;
    }

    pImgToRgbConvertCtx = sws_getContext(dec_ctx->width, dec_ctx->height,
        dec_ctx->pix_fmt, dec_ctx->width, dec_ctx->height, AV_PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL);
    if (!pImgToRgbConvertCtx) {
        av_log(NULL, AV_LOG_ERROR, "initting sws_ctx  failed\n");
        goto failure;
    }
    pFrameRGB->format = AV_PIX_FMT_BGR24;
    pFrameRGB->width = dec_ctx->width;
    pFrameRGB->height = dec_ctx->height;

#Opencv Mat 初始化方式

//方式一
 img_1 = new cv::Mat();
 img_1->create(cv::Size(width, height), CV_8UC3);
 memcpy(img_1->data, rgbBuffer , rgbNumBytes )
 //方式二
 cv::Mat* bgrImg = new cv::Mat(pFrameRGB->height, pFrameRGB->width, CV_8UC3, rgbBuffer);


图像颜色空间理解 1.什么是颜色空间? 计算机系统中表示现实世界各种颜色的色彩模型。常用的颜色空间有RGB,BGR,CMY,YUV,HSI等。不同的色彩空间只是同一物理量的不同表示法。 2.RGB颜色空间 主要用于计算机图形学中,依据人眼识别的颜色创建,图像中每一个像素都具有R,G,B三个颜色分量组成,这三个分量大小均为[0,255]。通常表示某个颜色的时候,写成一个3维... 阅读详情

相关推荐

【FFmpeg】使用sws_scale将AVFrame转换后的图像数据放入cv::Mat中

1、方法一,伪代码如下 cv::Mat mat; AVFrame avFrame; const int stride[] = {static_cast<int>(mat.step[0])}; ret = sws_scale(swsContext, &mat.data, stride, 0, mat.rows, avFrame->data, avFrame->linesize); if (ret <= 0){ printf("sws_scale error, r

郭老二 1605

【Android FFMPEG 开发】FFMPEG 解码 AVPacket 数据到 AVFrame ( AVPacket->解码器 | 初始化 AVFrame | 解码为 AVFrame 数据 )

I . FFMPEG 解码 AVPacket 数据到 AVFrame 前置操作 II . FFMPEG 解码 AVPacket 数据到 AVFrame 流程 III . FFMPEG 发送 AVPacket 数据包给编解码器 ( AVPacket->解码器 ) IV . FFMPEG AVPacket 内存释放 V . FFMPEG 初始化 AVFrame 结构体 VI . FFMPEG 解码器 AVCodec 接收并解码 AVPacket 数据到 AVFrame 中 VII . FFMPEG 解码 AVP

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3443

Light Tools 8.4 在 win10系统上的安装方法(64位)

** 总的来说安装LT需要以下步骤(折腾了三天终于装好): 安装LT软件–禁用签名–加载含数字签名的第三方inf–添加注册表/安装驱动/添加密钥–成功破解 一、下载对应的LightTools 8.4版本软件,如下图为解压后的文件: 并选择 进行默认安装。 二、禁用数字签名。这里我用了两种方法,一种不行就换另一种,最终成功禁用。 方法1: 1、输入“cmd”并以管理员身份运行; 2、输入或复制 bcdedit.exe /set nointegritychecks on (此命令若没成功,再试bcded

weixin_45560953的博客 1万+

FFMPEG关键结构体——AVFrame

AVFrame结构体一般用于存储原始数据(即非压缩数据,例如对视频来说是YUV,RGB,对音频来说是PCM),此外还包含了一些相关的信息。比如说,解码的时候存储了宏块类型表,QP表,运动矢量表等数据。编码的时候也存储了相关的数据。因此在使用FFMPEG进行码流分析的时候,AVFrame是一个很重要的结构体。AVFramet通常在解码时包含较多的码流参数,编码时主要用于承载图像数据或者音频采样数据。结构体的定义位于libavutil/frame.h,这里介绍解码情况下的主要变量 ① (1)图像数据: 对于pa

PPPPPPPKD的博客 7878

别再买模块了!手把手教你用FT232RL-REEL芯片,从零设计一个USB转串口电路板

本文详细介绍了如何使用FT232RL-REEL芯片从零设计USB转串口电路板,涵盖核心器件选型、原理图设计、PCB布局布线及焊接调试等关键步骤。通过实战案例和性能对比,展示自制电路板在成本、性能和可靠性上的优势,特别适合硬件爱好者和工程师参考。

weixin_30561425的博客 429

Unity类银河战士恶魔城学习总结(P162 Improve skeleton提升敌人的效果)

为敌人添加了快慢刀

suzh1qian的博客 572

AVFrame相关接口(函数)

如果这个帧是最后一个引用,则释放其数据。这个函数会释放帧的数据并将指针设为 NULL。并返回一个指向它的指针。这两个帧将共享同一数据缓冲区。的数据引用复制到另一个。分配一个新的数据缓冲区。参数指定数据的对齐方式。

m0_51386664的博客 592

小米路由器安装Misstar tools 和MIXBOX

1.该教程适用于如下路由器: 小米路由器1代硬盘版(R1D) 小米路由器mini(R1CM) 全新小米路由器硬盘版(R2D) 小米路由器3(R3) 小米路由器3G(R3G) 小米路由器Pro(R3P) 小米路由器HD(R3D) 2.Misstar2.0在线安装 方法如下: 1.根据路由器对应文件解压文件,把解压目录(比如小米3路由器为R3)和offline_install.sh到U盘根目录,并插入路由器 2.ssh登录后,cd到U盘的目录,比如小米3路...

wybarcelona的博客 2万+

FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

本文简单分析FFmpeg常见结构体的初始化和销毁函数的源代码。常见的结构体在文章:《FFMPEG中最关键的结构体之间的关系》中已经有过叙述,包括:AVFormatContext:统领全局的基本结构体。主要用于处理封装格式(FLV/MKV/RMVB等)。AVIOContext:输入输出对应的结构体,用于输入输出(读写文件,RTMP协议等)。AVStream,AVCodecContext:视音频流对应

雷霄骅(leixiaohua1020)的专栏 7万+

C# HttpClient 实战:3步绕过Cloudflare指纹拦截,获取完整网页内容

本文详细介绍了如何使用C# HttpClient绕过Cloudflare指纹拦截,获取完整网页内容的3步实战方案。通过完美复制浏览器请求头、智能管理Cookie容器以及处理动态挑战页面,开发者可以有效突破Cloudflare的反爬机制,适用于爬虫开发和数据采集项目。

weixin_31856057的博客 320

OpenCV实战系列——图像线条提取

基于内容的图像分析,需要从构成图像的像素集合中提取有意义的特征。轮廓、线条、区域等是基本的图像基元,可用于描述图像中包含的元素。本节将介绍如何提取重要的图像线条特征。

m0_58523831的博客 1万+

avframe_to_cvmat(FFmpeg解码帧AVFrame转Mat型)

cv::Mat avframe_to_cvmat(AVFrame *frame){        AVFrame dst;        cv::Mat m;        memset(&amp;dst, 0, sizeof(dst));        int w = frame-&gt;width, h = frame-&gt;height;        m = cv::Mat(h, w, ...

Lifelong Learning Pan 2355

AI Agent的数据安全与隐私保护措施

AI Agent(人工智能代理)作为一种能够感知环境、做出决策并采取行动的智能实体,在现代社会的各个领域中得到了广泛的应用,如智能客服、自动驾驶、金融风险评估等。随着其应用的不断拓展,AI Agent处理和存储的数据量急剧增加,这些数据包含了大量的个人敏感信息和商业机密。因此,确保AI Agent的数据安全与隐私保护变得至关重要。本文的目的在于全面探讨AI Agent的数据安全与隐私保护措施,涵盖从数据的采集、存储、处理到传输的整个生命周期。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 2864

FFmpeg的AVFrame数据和Mat互转

ffmpeg视频解码后得到的图像经常需要用Opencv进行一些图像处理,两者之间需要互相转化,ffmpeg解码后的数据类型是AVFrame,而Opencv的图像数据结构是Mat,这就需要做个转化。 AVFrame 转 Mat Mat AVFrameToMat(AVFrame *avframe,int width,int height) { if (width <= 0) width = avframe->width; ...

my_angle2016的博客 2481

【项目实战】AES实施应符合NIST密码算法验证程序

AES由美国国家标准与技术研究院(NIST)制定。NIST是负责开发和维护美国政府使用的技术标准的机构,包括加密标准。

奶爸的编程之路,也就一周冷个三天 765

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

完美解决OpenCV Mat 与 FFmpeg AVFrame 的相互转换

复制直接可用,完美解决Mat与AVFrame之间的相互转换

周小哥的博客 5938

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AVFrame和cv::Mat互转

《音视频应用开发系列文章目录》 ffmpeg视频解码后得到图像经常需要一些图像处理,opencv是图像处理的神器。所以就需要两者之间互相转化,ffmpeg解码后的数据类型是AVFrame,而opencv的图像数据结构是Mat,这就需要做个转化,本文实现了avframe->mat,mat->avframe。封装成函数 cv::Mat avframe2cvmat(AVFrame *av...

楷尘·极客 4418

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ffmpeg中最简单的AVFrame转cv::Mat函数 c++

具体来源不知道了,直接给函数吧 void avframeToMat(const AVFrame * frame, cv::Mat& image) { int width = frame->width; int height = frame->height; // Allocate the opencv mat and store its str...

春江水暖鸭先知 2982

opencv mat与avframe互转

原文:http://answers.opencv.org/question/36948/cvmat-to-avframe/cv::Mat avframe_to_cvmat(AVFrame *frame) { AVFrame dst; cv::Mat m; memset(&amp;dst, 0, sizeof(dst)); int ...

jacke121的专栏 8522

OpenCV|FFmpeg – OpenCV cv::Mat与FFmpeg AVFrame的相互转换

1OpenCVcv::Mat与FFmpegAVFrame相互转换 最近在处理OpenCV采集摄像头图片然后使用ffmpeg编码为h264裸流,之后再将h264裸流转换为OpenCV cv::Mat进行显示的问题,在这个过程中,如何将OpenCV的cv::Mat转化为FFmpeg AVFrame在进行h264编码,以及如何将h264解码后的AVFrame转换为cv::Mat是两个核心的问题...

SurpassLi的专栏 258

opencv mat 修改_CV::Mat与AVFrame格式转换的正确版本

google上可以搜索到许多CV::Mat与AVFrame格式转换的代码。可惜基本都是错误的。 比如: 1. https://www.codetd.com/article/879349 2. https://blog.youkuaiyun.com/jacke121/article/details/80326574 3. https://answers.opencv.org/question/3...

weixin_39630909的博客 718

cv::Mat转AVFrame相互转换

最近在使用ffmpeg取鱼眼相机的视频流做全景播放时遇到需要cv::Mat转AVFrame的转换,看到了,记录一下。

T_T_T_T_的博客 1493

FFmpeg转OpenCV Mat显示

      FFmpeg一般采用SDL进行显示,如果不追求复杂的界面、交互和多线程功能,当然也可以使用OpenCV的imshow()方法进行显示了,而且实现起来比SDL更简单。方法也很简单,只需要把视频帧的BGR格式的数据(如果是RGB格式,需要转换)转存到OpenCV的Mat矩阵里。OpenCV的Mat是一个类,由两个数据部分组成: 矩阵头(包含信息有矩阵的大小,用于存储的方法,矩阵存储的地址等...

AI吃大瓜的博客 6565

FFmpeg进行图像格式转换(cv::Mat --->>YUV---->>AVFrame)

opencv提供了rgb到yuv420的格式转换函数;下面给出基本用法。

zhangyue123的博客 3842

OPENCV+FFMPEG播放器

引子 OpenCV中有自己的用于处理图片和视频的类 VideoCapture ,可以很方便的读入文件和显示。 现在视频数据流是ffmpeg解码h264文件得到的,由于要依赖该数据源进行相应的后续处理,所以需要将ffmpeg中得到的数据缓存转换成可以被OpenCV处理的Mat类对象。 ffmpeg介绍 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,

jbl19860422的博客 4077

ffmpeg AVFrame 转 cv::Mat

//AVFrame 转 cv::mat cv::Mat frame_to_mat(const AVFrame * frame) { int width = frame->width; int height = frame->height; cv::Mat image(height, width, CV_8UC3); int cvLinesizes[1]; cvLinesizes[0] = image.step1(); if( NULL ==

machh的专栏 1856
上一篇: QT显示视频-QVideoWidget
下一篇: Ffmpeg 解复用器列表 demuxer_list
hiprogram
博客等级 码龄10年 1粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值