欢迎来到网际学院,让您的头脑满载而归!

FFmpeg的AVFrame数据转换到OpenCV Mat中

发布日期:2020-04-28 13:15:19 作者:管理员 阅读:119

使用FFmpeg的视频解码功能,可以接受rtsp 的H264码流,得到YUV数据;解码后的数据放在AVFrame 结构中,现将YUV数据转到Mat中AVFrame *frame;     

FFmpeg的AVFrame数据转换到OpenCV Mat中

使用FFmpeg的视频解码功能,可以接受rtsp 的H264码流,得到YUV数据;

解码后的数据放在AVFrame 结构中,

现将YUV数据转到Mat中

AVFrame *frame;
     int width = avFrame2->width, height = avFrame2->height;
     cv::Mat tmp_img = cv::Mat::zeros(height * 3 / 2, width, CV_8UC1);
     memcpy(tmp_img.data, avFrame2->data[0], width*height);
     memcpy(tmp_img.data + width*height, avFrame2->data[1], width*height / 4);
     memcpy(tmp_img.data + width*height * 5 / 4, avFrame2->data[2], width*height / 4);
     //cv::imshow("yuv_show", tmp_img);
     cv::Mat srcImage;
     cv::cvtColor(tmp_img, srcImage, CV_YUV2BGR_I420);
     //cv::imshow("bgr_show", bgr);
     cv::waitKey(1);

需要讲解的是:Mat的rows是frame->heigth的 3/2倍,cols等于frame->width,单通道;

如果要转换成BGR显示,用CV_YUV2BGR_I420;  因为rtsp流就是IYUV(I420)格式;


通过查看效果,YUV转BGR后与原视频一样。

 FFmpeg的AVFrame数据转换到OpenCV Mat中

cv::cvtColor( tmp_img, bgr, CV_YUV2BGR_I420 );

CV_BGR2YUV_I420:BGR转换成IYUV  即I420;

CV_YUV2BGR_I420:从I420  转换成BGR(24)


Copyright oneie ©2014-2017 All Rights Reserved. 所有资料来源于互联网对相关版权责任概不负责。如发现侵犯了您的版权请与我们联系 QQ:86662817。 网际学院 版权所有 京ICP备14031243号-3
免责声明  商务合作及投稿请联系 QQ:86662817