可以讲解一下降低图像分辨率的下采样方法的代码吗?

    int width = 2560;
int height = 1600;
int ySize = width * height;
int uSize = ySize / 4;
int vSize = ySize / 4;
uint8_t* PY = new uint8_t[ySize]();//没采样前的uint8_t*相当于char*,new uint8_t[ySize]定义长度为ysize的数组
uint8_t* PU = new uint8_t[uSize]();
uint8_t* PV = new uint8_t[vSize]();

uint8_t* PS_Y = new uint8_t[ySize / 4]();//2倍下采样后的
uint8_t* PS_U = new uint8_t[uSize / 4]();
uint8_t* PS_V = new uint8_t[vSize / 4]();
for (int frame = 0; frame < 5; frame++)// 2倍下采样的帧数
{
    fread(PY, 1, ySize, fin);//fin是原文件,每次读1字节,读ysize次,从fin中读到PY里 正好1帧
    fread(PU, 1, uSize, fin);
    fread(PV, 1, vSize, fin);

    //YUV分量的起始位置
    unsigned char* src_img_py = PY;
    unsigned char* src_img_pu = PU;
    unsigned char* src_img_pv = PV;
    //YUV分量的目标位置
    unsigned char* dst_img_py = PS_Y;
    unsigned char* dst_img_pu = PS_U;
    unsigned char* dst_img_pv = PS_V;


    int i, j = 0;
    for (i = 0; i < height / 2; i++) //Y分量采样
    {
        for (j = 0; j < width / 2; ++j) //Luma
        {
            *dst_img_py = *src_img_py;
            dst_img_py++;
            src_img_py += 2;//每两个像素取一个
        }
        src_img_py += width; 
    }

    for (i = 0; i < height / 4; i++)//UV分量采样
    {
        for (j = 0; j < width / 4; ++j) //Chroma
        {
            *dst_img_pu = *src_img_pu;
            dst_img_pu++;
            src_img_pu += 2;

            *dst_img_pv = *src_img_pv;
            dst_img_pv++;
            src_img_pv += 2;
        }
        src_img_pu += width / 2;
        src_img_pv += width / 2;
    }

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。