ZBLOG

AVFrame是yuv420p

如果AVFrame是YUV420P格式,你可以先将其转换为BGR格式,然后再使用OpenCV保存。下面是一个示例代码:

#include <opencv2/opencv.hpp>
extern "C" {
#include <libavutil/imgutils.h>
#include <libswscale/swscale.h>
}

void saveAVFrame(AVFrame *frame, const char *filename) {
    // 创建一个与AVFrame宽高相匹配的OpenCV Mat对象
    cv::Mat image(frame->height, frame->width, CV_8UC3);

    // 创建SwsContext进行图像格式转换
    SwsContext* sws_ctx = sws_getContext(frame->width, frame->height, AV_PIX_FMT_YUV420P,
                                         frame->width, frame->height, AV_PIX_FMT_BGR24,
                                         0, nullptr, nullptr, nullptr);
    
    // 转换并保存图像
    uint8_t* dest_data[1] = { image.data };
    int dest_linesize[1] = { static_cast<int>(image.step[0]) };
    sws_scale(sws_ctx, frame->data, frame->linesize, 0, frame->height,
              dest_data, dest_linesize);
    
    // 释放SwsContext内存
    sws_freeContext(sws_ctx);

    // 保存图像到文件
    cv::imwrite(filename, image);
}

请确保已经正确链接了FFmpeg和OpenCV库,并且包含了相应的头文件。调用saveAVFrame函数,传入YUV420P格式的AVFrame指针和要保存的文件名,即可实现将AVFrame保存为图像文件。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=4831

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?