如果AVFrame的格式是YUV420p,可以将其转换为BGR格式的cv::Mat对象。下面是一个示例代码:
#include <opencv2/opencv.hpp>
// 将YUV420p格式的AVFrame转换为BGR格式的cv::Mat
cv::Mat avframeToMat(AVFrame* frame) {
cv::Mat image;
// 获取图像尺寸
int width = frame->width;
int height = frame->height;
// 创建YUV420p转BGR的颜色空间转换器
cv::cvtColor(cv::Mat(height + height / 2, width, CV_8UC1, frame->data[0]), image, cv::COLOR_YUV2BGR_I420);
return image;
}
int main() {
// 假设有一个名为frame的AVFrame对象
// 调用avframeToMat函数将YUV420p格式的AVFrame转换为BGR格式的cv::Mat
cv::Mat frameImage = avframeToMat(frame);
// 在这里可以使用cv::Mat对象进行图像处理
return 0;
}
请注意,在转换过程中,我们首先创建了一个高度为height + height / 2
(包含Y、U和V分量)的单通道图像,然后使用cvtColor
函数将其从YUV420p格式转换为BGR格式。
希望这个示例对你有帮助!
内容由零声教学AI助手提供,问题来源于学员提问