m0_47397119 2023-02-20 16:36 采纳率: 0%
浏览 15

yuv422图像缩放

请问如何在yuv422原格式进行缩放,不要转其他格式,c++ opencv,

  • 写回答

3条回答 默认 最新

  • CodeBytes 2023-02-20 16:42
    关注

    该回答引用ChatGPT

    在C++ OpenCV中进行YUV422格式的缩放,可以使用cv::resize函数来实现。在进行缩放之前,需要注意以下几个问题:

    由于YUV422格式中,每个像素的Y分量与U、V分量共用一个像素,因此在进行缩放时需要注意对应关系。

    由于缩放会改变图像的像素数量,因此在进行缩放时需要重新计算每个像素的位置。

    以下是一个示例代码,展示了如何对YUV422格式的图像进行缩放:

    
    #include <opencv2/opencv.hpp>
    
    using namespace cv;
    
    int main()
    {
        // 读取YUV422格式的图像
        Mat srcImage = imread("test.yuv", IMREAD_UNCHANGED);
        int width = srcImage.cols;
        int height = srcImage.rows;
    
        // 定义缩放比例
        double scale = 0.5;
    
        // 计算缩放后的图像大小
        int dstWidth = width * scale;
        int dstHeight = height * scale;
    
        // 定义输出图像
        Mat dstImage(dstHeight, dstWidth, CV_8UC2);
    
        // 计算Y、U、V分量的步长
        int yStep = srcImage.cols * 2;
        int uvStep = srcImage.cols;
    
        // 缩放图像
        for (int y = 0; y < dstHeight; y++)
        {
            for (int x = 0; x < dstWidth; x++)
            {
                // 计算源图像中对应像素的位置
                int srcX = x / scale;
                int srcY = y / scale;
    
                // 计算对应的Y、U、V分量的位置
                int srcYIndex = srcY * yStep + srcX * 2;
                int srcUVIndex = (srcY / 2) * uvStep + (srcX / 2) * 4 + 1;
    
                // 从源图像中获取对应的Y、U、V分量
                uchar Y = srcImage.data[srcYIndex];
                uchar U = srcImage.data[srcUVIndex];
                uchar V = srcImage.data[srcUVIndex + 2];
    
                // 将Y、U、V分量写入目标图像
                int dstIndex = y * dstWidth * 2 + x * 2;
                dstImage.data[dstIndex] = Y;
                dstImage.data[dstIndex + 1] = U;
                dstImage.data[dstIndex + 2] = Y;
                dstImage.data[dstIndex + 3] = V;
            }
        }
    
        // 保存缩放后的图像
        imwrite("test_resized.yuv", dstImage);
    
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月20日

悬赏问题

  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥15 路由器考试怎么办,有懂行的吗 ,eNSP
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题
  • ¥15 C# iMobileDevice