wanghaoqi_ 2025-02-15 16:06 采纳率: 30%
浏览 13

yuv怎么转换成jpg图片求编程好的指令能转很多张的呢种。今天的问题求解答一下,在下方评论

yuv图片怎么转换成jpg图片求解答一下yuv怎么转换成jpg图片求编程好的指令能转很多张的呢种。今天的问题求解答一下,在下方评论

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-02-15 16:06
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    YUV转换成JPG图片

    YUV是一种视频编码格式,用于存储视频数据。要将YUV转换成JPG图片,可以使用以下方法:

    Python

    import cv2
    
    def yuv_to_jpg(yuv_data, width, height):
        # 将YUV数据转换成OpenCV支持的BGR格式
        yuv_bgr = cv2.cvtColor(yuv_data, cv2.COLOR_YUV2BGR)
        # 保存为JPG图片
        cv2.imwrite('output.jpg', yuv_bgr)
    
    # 读取YUV数据
    yuv_data = open('input.yuv', 'rb').read()
    # 获取图片宽高
    width, height = 640, 480
    # 转换并保存
    yuv_to_jpg(yuv_data, width, height)
    

    C语言

    #include <stdio.h>
    #include <stdlib.h>
    #include <png.h>
    
    void yuv_to_jpg(unsigned char *yuv_data, int width, int height) {
        // 将YUV数据转换成BGR格式
        unsigned char *bgr_data = malloc(width * height * 3);
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                int y = yuv_data[i * width + j];
                int u = yuv_data[i * width * 1.5 + j / 2] + (i % 2) * 128;
                int v = yuv_data[i * width * 1.5 + j / 2 + width / 2] + (i % 2) * 128;
                bgr_data[i * width * 3 + j * 3 + 0] = y + (u - 128) * 0.493;
                bgr_data[i * width * 3 + j * 3 + 1] = y - (u - 128) * 0.493 - (v - 128) * 0.877;
                bgr_data[i * width * 3 + j * 3 + 2] = y + (v - 128) * 0.877;
            }
        }
        // 保存为JPG图片
        FILE *fp = fopen("output.jpg", "wb");
        png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
        png_infop info_ptr = png_create_info_struct(png_ptr);
        png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
        png_write_info(png_ptr, info_ptr);
        png_write_image(png_ptr, bgr_data);
        png_write_end(png_ptr, info_ptr);
        fclose(fp);
        free(bgr_data);
    }
    
    int main() {
        // 读取YUV数据
        unsigned char *yuv_data = open("input.yuv", "rb").read();
        // 获取图片宽高
        int width, height;
        // 转换并保存
        yuv_to_jpg(yuv_data, width, height);
        return 0;
    }
    

    C++

    #include <iostream>
    #include <fstream>
    #include <opencv2/opencv.hpp>
    
    void yuv_to_jpg(unsigned char *yuv_data, int width, int height) {
        // 将YUV数据转换成OpenCV支持的BGR格式
        cv::Mat yuv_mat(height, width, CV_8UC1, yuv_data);
        cv::Mat bgr_mat;
        cv::cvtColor(yuv_mat, bgr_mat, cv::COLOR_YUV2BGR);
        // 保存为JPG图片
        cv::imwrite("output.jpg", bgr_mat);
    }
    
    int main() {
        // 读取YUV数据
        unsigned char *yuv_data = open("input.yuv", "rb").read();
        // 获取图片宽高
        int width, height;
        // 转换并保存
        yuv_to_jpg(yuv_data, width, height);
        return 0;
    }
    

    这些代码都可以将YUV数据转换成JPG图片,但是需要注意的是,YUV数据的格式和编码方式可能会影响转换结果。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月15日