请使用opencv将mat yuv数据转换为h264流
时间: 2024-06-11 22:09:10 浏览: 244
YUV转.H264
首先,需要使用cv::VideoWriter类将yuv视频帧转换为h264流。以下是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 定义视频帧的大小和格式
int width = 640;
int height = 480;
int fps = 30;
cv::Size frameSize(width, height);
int fourcc = cv::VideoWriter::fourcc('H','2','6','4');
// 读取yuv文件
cv::Mat yuv(height * 3 / 2, width, CV_8UC1);
FILE* fp = fopen("test.yuv", "rb");
if (!fp)
{
std::cout << "Failed to open yuv file." << std::endl;
return -1;
}
// 创建VideoWriter对象
cv::VideoWriter writer;
if (!writer.open("test.h264", fourcc, fps, frameSize))
{
std::cout << "Failed to open output file." << std::endl;
return -1;
}
// 逐帧读取yuv数据并写入h264流
while (fread(yuv.data, 1, width * height * 3 / 2, fp) == width * height * 3 / 2)
{
cv::Mat bgr;
cv::cvtColor(yuv, bgr, cv::COLOR_YUV2BGR_I420);
writer.write(bgr);
}
// 释放资源
fclose(fp);
writer.release();
return 0;
}
```
在上述代码中,我们首先定义了视频帧的大小和格式,然后读取了一个yuv文件。接着,我们创建了一个cv::VideoWriter对象,并使用其open()方法打开输出文件。最后,我们逐帧读取yuv数据并将其转换为bgr格式,随后使用VideoWriter对象的write()方法将其写入输出文件。最后,我们释放了资源并返回0。
阅读全文