opencv mat与avframe互转

举报
风吹稻花香 发表于 2021/06/04 22:50:58 2021/06/04
【摘要】 原文:http://answers.opencv.org/question/36948/cvmat-to-avframe/ cv::Mat avframe_to_cvmat(AVFrame *frame){ AVFrame dst; cv::Mat m; memset(&dst, 0, sizeof(dst)); int w = frame->widt...


原文:http://answers.opencv.org/question/36948/cvmat-to-avframe/



  
  1. cv::Mat avframe_to_cvmat(AVFrame *frame)
  2. {
  3. AVFrame dst;
  4. cv::Mat m;
  5. memset(&dst, 0, sizeof(dst));
  6. int w = frame->width, h = frame->height;
  7. m = cv::Mat(h, w, CV_8UC3);
  8. dst.data[0] = (uint8_t *)m.data;
  9. avpicture_fill( (AVPicture *)&dst, dst.data[0], PIX_FMT_BGR24, w, h);
  10. struct SwsContext *convert_ctx=NULL;
  11. enum PixelFormat src_pixfmt = (enum PixelFormat)frame->format;
  12. enum PixelFormat dst_pixfmt = PIX_FMT_BGR24;
  13. convert_ctx = sws_getContext(w, h, src_pixfmt, w, h, dst_pixfmt,
  14. SWS_FAST_BILINEAR, NULL, NULL, NULL);
  15. sws_scale(convert_ctx, frame->data, frame->linesize, 0, h,
  16. dst.data, dst.linesize);
  17. sws_freeContext(convert_ctx);
  18. return m;
  19. }
  20. AVFrame cvmat_to_avframe(cv::Mat* frame)
  21. {
  22. AVFrame dst;
  23. cv::Size frameSize = frame->size();
  24. AVCodec *encoder = avcodec_find_encoder(AV_CODEC_ID_H264);
  25. AVFormatContext* outContainer = avformat_alloc_context();
  26. AVStream *outStream = avformat_new_stream(outContainer, encoder);
  27. avcodec_get_context_defaults3(outStream->codec, encoder);
  28. outStream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
  29. outStream->codec->width = frame->cols;
  30. outStream->codec->height = frame->rows;
  31. avpicture_fill((AVPicture*)&dst, frame->data, PIX_FMT_BGR24, outStream->codec->width, outStream->codec->height);
  32. dst.width = frameSize.width;
  33. dst.height = frameSize.height;
  34. SaveFrame(&dst,dst.width,dst.height,0);
  35. return dst;
  36. }

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/80326574

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。