#include <opencv2/opencv.hpp> int main() { // 读取 YVU420P 格式的图像 cv::Mat yvuImage = cv::imread("input.yvu", cv::IMREAD_UNCHANGED); // 将图像从 YVU420P 转换为 YUV420P cv::Mat yuvImage; cv::cvtColor(yvuImage, yuvImage, cv::COLOR_YUV2BGR_I420); // 保存转换后的图像 cv::imwrite("output.yuv", yuvImage); return 0; }补充后面yuv数据转RGB
时间: 2024-04-10 22:27:01 浏览: 13
要将 YUV420P 数据转换为 RGB 格式,您可以使用以下代码补充 `main` 函数的后半部分:
```cpp
// 创建 RGB 图像的 cv::Mat 对象
cv::Mat rgbImage;
int width = yuvImage.cols;
int height = yuvImage.rows;
rgbImage.create(height, width, CV_8UC3);
// 将 YUV420P 数据转换为 RGB
int uIndex = width * height;
int vIndex = width * height * 5 / 4;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int y = yuvImage.at<uchar>(i, j);
int u = yuvImage.at<uchar>(i / 2, j / 2 + uIndex);
int v = yuvImage.at<uchar>(i / 2, j / 2 + vIndex);
int r = y + 1.402 * (v - 128);
int g = y - 0.344136 * (u - 128) - 0.714136 * (v - 128);
int b = y + 1.772 * (u - 128);
r = std::max(0, std::min(255, r));
g = std::max(0, std::min(255, g));
b = std::max(0, std::min(255, b));
rgbImage.at<cv::Vec3b>(i, j) = cv::Vec3b(b, g, r);
}
}
// 保存转换后的图像
cv::imwrite("output.rgb", rgbImage);
```
在