FFmpeg中数据与OpenCV中Mat数据的转换
2017-11-24 21:11
941 查看
做的一个程序,在Qt中用FFmpeg接收解码RTSP流,后期需要对解码得到的数据进行处理,因此需要把FFmpeg得到的数据转换成OpenCV中的Mat类型存储下来。
FFmpeg通过sws_scale函数将原来视频格式转换为YUV格式,保存着AVPicture结构体中,而AVPicture结构体中的data数据就是我们需要存储的视频数据了。下面的代码,是在循环读取RTSP视频流之前,进行的设置:
在FFmpeg的sws_scale接口函数实现YUV格式的数据到BGR数据的转换后,数据保存在pAVPicture中,由于有了上述的avpicture_fill函数进行关联,从而使得数据自动缓存到out_bufferRGB中,从out_bufferRGB复制拷贝到Mat就得到一副BGR图像用于OpenCV使用。
至此,转换完毕,如果用于imshow显示,还需要进行转换成RGB格式,才能正常显示,不然颜色会异常
FFmpeg通过sws_scale函数将原来视频格式转换为YUV格式,保存着AVPicture结构体中,而AVPicture结构体中的data数据就是我们需要存储的视频数据了。下面的代码,是在循环读取RTSP视频流之前,进行的设置:
//相关数据的定义 AVPicture pAVPicture; Mat pCvMat; int pSize; uint8_t *out_bufferRGB=NULL; //代码实现部分 pSize=avpicture_get_size(AV_PIX_FMT_BGR24,pAVCodecContext->width,pAVCodecContext->height); out_bufferRGB=(uint8_t *)av_malloc(pSize); //avpicture_fill函数的作用:pAVPicture和out_bufferRGB是已经申请到的一段内存 //该函数执行完,pAVPicture中的数据按照AV_PIX_FMT_BGR24的格式自动关联到out_bufferRGB中 //之后读取数据经过处理,自动保存到pAVPicture,也自动关联到了out_bufferRGB用于缓存。 avpicture_fill(&pAVPicture,out_bufferRGB,AV_PIX_FMT_BGR24,videoWidth,videoHeight); //opencv中用于创建一个mat类型变量。 pCvMat.create(cv::Size(videoWidth,videoHeight),CV_8UC3);
在FFmpeg的sws_scale接口函数实现YUV格式的数据到BGR数据的转换后,数据保存在pAVPicture中,由于有了上述的avpicture_fill函数进行关联,从而使得数据自动缓存到out_bufferRGB中,从out_bufferRGB复制拷贝到Mat就得到一副BGR图像用于OpenCV使用。
sws_scale(pSwsContext,(const uint8_t* const *)pAVFrame->data, pAVFrame->linesize,0,videoHeight, pAVPicture.data,pAVPicture.linesize); memcpy(pCvMat.data,out_bufferRGB,pSize);
至此,转换完毕,如果用于imshow显示,还需要进行转换成RGB格式,才能正常显示,不然颜色会异常
相关文章推荐
- opencv 3.0 Mat 数据类型转换
- Opencv中Mat数据类型CV_8UC3转换为 CV_32FC3注意事项
- openCV中的Mat、IplImage数据的转换
- OpenCV中Mat与IplImage和CvMat数据类型间的相互转换
- opencv 数据类型转换:CvArr, Mat, CvMat, IplImage, BYTE 转
- ffmpeg解码数据转为Mat通过opencv函数显示
- FFmpeg解码H264裸流并转换成opencv Mat
- opencv之Mat数据类型和ImlImage数据类型以及CvMat数据类型得转换
- OpenCV中的Mat数据与Matlab中的数据的相互转换
- OpenCV中Mat与IplImage和CvMat数据类型间的相互转换
- ffmpeg中avframe的YUV格式数据到OpenCV中Mat的BGR格式转换
- 将MATLAB中的mat数据转换为OpenCV能够读取的xml数据
- opencv 数据类型转换:CvArr, Mat, CvMat, IplImage, BYTE
- Halcon 与 OpenCV 图像数据类型转换 HObject和 Mat
- OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年
- mat文件与txt文件的相互转换(特别的,mat转txt,数据格式设置)
- 使用C++将OpenCV中Mat的数据写入二进制文件,用Matlab读出
- Qt中使用OpenCV显示图片时,Mat结构转换为QImage结构的问题
- C++读写txt文件方式以及基于opencv的Mat数据类型读写txt文件
- OpenCV中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage