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(&dst, 0, sizeof(dst)); int w = frame->widt...
原文: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->width, h = frame->height;
-
m = cv::Mat(h, w, CV_8UC3);
-
dst.data[0] = (uint8_t *)m.data;
-
avpicture_fill( (AVPicture *)&dst, dst.data[0], PIX_FMT_BGR24, w, h);
-
-
struct SwsContext *convert_ctx=NULL;
-
enum PixelFormat src_pixfmt = (enum PixelFormat)frame->format;
-
enum PixelFormat dst_pixfmt = PIX_FMT_BGR24;
-
convert_ctx = sws_getContext(w, h, src_pixfmt, w, h, dst_pixfmt,
-
SWS_FAST_BILINEAR, NULL, NULL, NULL);
-
sws_scale(convert_ctx, frame->data, frame->linesize, 0, h,
-
dst.data, dst.linesize);
-
sws_freeContext(convert_ctx);
-
-
return m;
-
}
-
AVFrame cvmat_to_avframe(cv::Mat* frame)
-
{
-
AVFrame dst;
-
cv::Size frameSize = frame->size();
-
AVCodec *encoder = avcodec_find_encoder(AV_CODEC_ID_H264);
-
AVFormatContext* outContainer = avformat_alloc_context();
-
AVStream *outStream = avformat_new_stream(outContainer, encoder);
-
avcodec_get_context_defaults3(outStream->codec, encoder);
-
-
outStream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
-
outStream->codec->width = frame->cols;
-
outStream->codec->height = frame->rows;
-
avpicture_fill((AVPicture*)&dst, frame->data, PIX_FMT_BGR24, outStream->codec->width, outStream->codec->height);
-
dst.width = frameSize.width;
-
dst.height = frameSize.height;
-
SaveFrame(&dst,dst.width,dst.height,0);
-
return dst;
-
}
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/80326574
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)