ffmpeg 解码 到 opencv 之间传递

项目中需要用ffmpeg解码,并且将解码后的视频传入opencv。通过查找相关资料进行快速学习实现了这个需求。现进行简单的记录和分享。

ffmpeg 解码函数:len = avcodec_decode_video2(pInputCodecContext, dst, &nComplete, &InPack);     dst 为 AVFrame *dst,存放了解码后的数据。解码后存入dst的视频是yuv420格式。dst->data[0],dst->data[1],dst->data[2] 中分别存了 yuv的数据。dst->width*dst->height 是原始视频的分辨率。

opencv 结构体 Mat frame, frame=frame.create(dst->height*1.5, dst->width, CV_8UC1);  用frame存储 yuv420 的数据, yuv 需要申请的内存大小为dst->width*dst->height *1.5

memcpy(frame.data,dst->data[0], dst->width*dst->height);  存入 y
memcpy(frame.data+640*480,dst->data[1], dst->width*dst->height/4);   存入 u
memcpy(frame.data+640*480*5/4,dst->data[2], dst->width*dst->height/4);  存入 v

这样解码后的yuv420 数据就存入了opencv中。可添加

cv::cvtColor(frame, rgbImg,CV_YUV2BGR_I420);  //yuv转成rgb
if(frame.empty())break;
imshow("frame",rgbImg);

waitKey(1); 显示解码后的视频

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值