ffmpeg AVFrame 转 cv::Mat
Posted lcyw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg AVFrame 转 cv::Mat相关的知识,希望对你有一定的参考价值。
//AVFrame 转 cv::mat
cv::Mat frame_to_mat(const AVFrame * frame)
int width = frame->width;
int height = frame->height;
cv::Mat image(height, width, CV_8UC3);
int cvLinesizes[1];
cvLinesizes[0] = image.step1();
if( NULL == _swsContext)
_swsContext = sws_getContext(width, height,
(AVPixelFormat)frame->format, width, height,
AVPixelFormat::AV_PIX_FMT_BGR24, SWS_FAST_BILINEAR, NULL, NULL, NULL);
sws_scale(_swsContext, frame->data,
frame->linesize, 0, height, &image.data, cvLinesizes);
return image;
上面函数传入的参数frame中的图像格式,可以是YUV, RGB ,等等,,
经过sws_scale()转换之后,写入cv::Mat 数据区。
还有一种方式 是直接将AVFrame 中的RGB数据赋值给cv::Mat
cv::Mat img;
img = cv::Mat(height, width, CV_8UC3);
img.data = _rgb_frame->data[0];
以上是关于ffmpeg AVFrame 转 cv::Mat的主要内容,如果未能解决你的问题,请参考以下文章