ffmpeg到opencv的格式转换

       首先通过ffmpeg的sws_scale函数可以将原视频格式转换为YUV格式,保存在AVPicture结构体里,而AVPicture结构体里的data成员即储存着视频数据,下面通过一段代码就可以将YUV格式的视频转换成opencv的Mat 格式:

            Mat mYUV(c->height + c->height/2, c->width, CV_8UC1, * pict.data);// pict.data即为视频的数据
            Mat mRGB(c->height, c->width, CV_8UC3);
            cv::cvtColor(mYUV,mRGB,CV_YUV2BGR_YV12);

      这一工作花费了我大半天的时间,以为这种格式转换很复杂,其实很简单:只要得到原视频的数据data,就可以用此data初始化任何库的图像容器,因为即便是各个库的图片容器不一样,但是视频的数据格式确实一样的,YUV的就是YUV的,RGB的就是RGB的,只要我能得到这个“数据”,就能用此数据初始化任何图片容器,这个过程也就是拿这些数据去填充容器,容器虽然不一样,但是数据一样

你可能感兴趣的:(opencv)