YUV值对应的颜色

最近有人在网上问我,YUV的值对应的颜色是如何的

下面给出YUV值对应的颜色关系

256张图512x512,每张对应的Y为0~255   每4x4对应的是同一颜色区域  横坐标 U  纵坐标V

yuv下载地址

http://download.csdn.net/detail/cabbage2008/9314683


这里截取了Y=0,10,20,60,128,250,255几张

Y=0


Y=10


Y=20


Y=60


Y=128


Y=250


Y=255




生成代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef       void                Void;
typedef       bool                Bool;
typedef       int                 Int;
typedef       unsigned char       UChar;
typedef       UChar               Pel;        ///< 16-bit pixel type

class TComPicYuv
{
private:

    // ------------------------------------------------------------------------------------------------
    //  YUV buffer
    // ------------------------------------------------------------------------------------------------

    Pel*  m_apiPicBufY;           ///< Buffer (including margin)
    Pel*  m_apiPicBufU;
    Pel*  m_apiPicBufV;


    // ------------------------------------------------------------------------------------------------
    //  Parameter for general YUV buffer usage
    // ------------------------------------------------------------------------------------------------

    Int   m_iPicWidth;            ///< Width of picture
    Int   m_iPicHeight;           ///< Height of picture

public:
    TComPicYuv         ();
    virtual ~TComPicYuv();

    // ------------------------------------------------------------------------------------------------
    //  Memory management
    // ------------------------------------------------------------------------------------------------

    Bool  create      ( Int iPicWidth, Int iPicHeight );
    Void  destroy     ();

    Void  setYuv      (Pel pixelY,Pel pixelU,Pel pixelV);
    Void  setPixel    (int posX, int posY, int width, Pel pixelY,Pel pixelU,Pel pixelV);

    // ------------------------------------------------------------------------------------------------
    //  Get information of picture
    // ------------------------------------------------------------------------------------------------
    Pel*  getPicBufY  ()     { return m_apiPicBufY ; }
    Pel*  getPicBufU  ()     { return m_apiPicBufU ; }
    Pel*  getPicBufV  ()     { return m_apiPicBufV ; }

    Int   getWidth    ()     { return  m_iPicWidth;    }
    Int   getHeight   ()     { return  m_iPicHeight;   }

    Int   getStride   ()     { return  m_iPicWidth ;    }
    Int   getCStride  ()     { return  (m_iPicWidth >> 1); }

};// END CLASS DEFINITION TComPicYuv

TComPicYuv::TComPicYuv()
{
    m_apiPicBufY      = NULL;   // Buffer (including margin)
    m_apiPicBufU      = NULL;
    m_apiPicBufV      = NULL;
}

TComPicYuv::~TComPicYuv()
{
}

Bool TComPicYuv::create( Int iPicWidth, Int iPicHeight )
{
    m_iPicWidth       = iPicWidth;
    m_iPicHeight      = iPicHeight;


    m_apiPicBufY      = (Pel*)malloc(m_iPicWidth * m_iPicHeight * sizeof(Pel));
    m_apiPicBufU      = (Pel*)malloc((m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel));
    m_apiPicBufV      = (Pel*)malloc((m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel));

    return true;
}

Void TComPicYuv::destroy()
{

    if( m_apiPicBufY ){ free( m_apiPicBufY );    m_apiPicBufY = NULL; }
    if( m_apiPicBufU ){ free( m_apiPicBufU );    m_apiPicBufU = NULL; }
    if( m_apiPicBufV ){ free( m_apiPicBufV );    m_apiPicBufV = NULL; }

}

Void TComPicYuv::setYuv(Pel pixelY,Pel pixelU,Pel pixelV)
{
    if( m_apiPicBufY ){ memset(m_apiPicBufY, pixelY,m_iPicWidth * m_iPicHeight * sizeof(Pel)) ; }
    if( m_apiPicBufU ){ memset(m_apiPicBufU, pixelU,(m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel)) ; }
    if( m_apiPicBufV ){ memset(m_apiPicBufV, pixelV,(m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel)) ; }
}

Void TComPicYuv::setPixel(int posX, int posY, int width, Pel pixelY,Pel pixelU,Pel pixelV)
{
    Pel *Y = m_apiPicBufY + posY*m_iPicWidth+posX;
    for(int h = 0; h<width; h++)
    {
        for(int w = 0; w<width;w++)
        {
            Y[h*m_iPicWidth + w] = pixelY;
        }
    }

    Pel *U = m_apiPicBufU + (posY>>1)*(m_iPicWidth>>1)+(posX>>1);
    Pel *V = m_apiPicBufV + (posY>>1)*(m_iPicWidth>>1)+(posX>>1);
    
    for(int h = 0; h<(width>>1); h++)
    {
        for(int w = 0; w<(width>>1);w++)
        {
            U[h*(m_iPicWidth>>1) + w] = pixelU;
            V[h*(m_iPicWidth>>1) + w] = pixelV;
        }
    }
}

int main()
{
    TComPicYuv *frame = new TComPicYuv;
    TComPicYuv *clourMap = new TComPicYuv;

    frame->create(8,8);
    clourMap->create(512,512);

    FILE *FrameFile = fopen("D:\\clourFrame_8x8.yuv","wb");
    FILE *clourFile = fopen("D:\\clourMap_512x512.yuv","wb");

    for(int Y = 0; Y<256; Y++)
    {
        for(int U = 0; U<256; U++)
        {
            for(int V = 0; V<256; V++)
            {
                frame->setYuv((Pel)Y,(Pel)U,(Pel)V);
                fwrite(frame->getPicBufY(),1,frame->getWidth()*frame->getHeight(),FrameFile);
                fwrite(frame->getPicBufU(),1,(frame->getWidth()*frame->getHeight())>>2,FrameFile);
                fwrite(frame->getPicBufV(),1,(frame->getWidth()*frame->getHeight())>>2,FrameFile);

                int  count = Y*256*256 + U*256 + V;
                if(count%1000000==0)
                {
                    printf("=");
                }
            }
        }
    }

    for(int Y = 0; Y<256; Y++)
    {
        for(int U = 0; U<256; U++)
        {
            for(int V = 0; V<256; V++)
            {
                clourMap->setPixel(U*2,V*2,2,Y,U,V);
            }
        }

        fwrite(clourMap->getPicBufY(),1,clourMap->getWidth()*clourMap->getHeight(),clourFile);
        fwrite(clourMap->getPicBufU(),1,(clourMap->getWidth()*clourMap->getHeight())>>2,clourFile);
        fwrite(clourMap->getPicBufV(),1,(clourMap->getWidth()*clourMap->getHeight())>>2,clourFile);
        
        printf("*");
    }

    fclose(clourFile);
    fclose(FrameFile);

    frame->destroy();
    clourMap->destroy();
}


  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在线RGB颜色YUV转换器是一种在线工具,用于转换RGB颜色模式到YUV颜色模式。RGB代表红、绿、蓝,而YUV代表亮度、色度和饱和度。这个转换器的作用是帮助用户将RGB颜色格式转换成YUV格式,这在数字图像和视频处理中非常常见。 使用在线RGB颜色YUV转换器,只需输入所需转换的RGB颜色,例如红色为255,绿色为0,蓝色为0。然后点击“转换”按钮,即可得到其相应的YUV颜色。这个转换器还提供了可视化效果,即用户在输入RGB后,会在网页的右侧看到相应的颜色块,以便用户看到他们的RGB颜色是什么样的。 在实际应用中,将RGB颜色格式转换为YUV格式的目的是为了压缩数字视频流。YUV模式更适合于视频编码,因为例如红色和绿色的像素虽然颜色不同,但在人眼中看起来差别不大,可以合并成一个颜色。同时,YUV模式中的亮度(Y)更重要,还可以通过调整Y的来控制图像的亮度。因此,将RGB转YUV是数字视频和图像处理中的一个重要步骤,这个在线转换器大大简化了这个过程。 ### 回答2: 一款在线RGB颜色YUV转换器是一种非常实用的工具,可以用于将 RGB 颜色转换为 YUV 颜色空间中的对应。在许多图像处理和视频处理应用中都需要使用 YUV 颜色空间,所以这样的转换器非常有用。 通过这款在线转换器,您可以将 RGB 颜色输入到指定的输入框中,然后将它们转换为 YUV 颜色空间中的对应。转换后,您可以看到输出的 YUV ,并且可以将它们用于进一步处理。 转换RGB颜色YUV颜色的过程非常简单。RGB 颜色是由红、绿和蓝三个通道的组成的,而 YUV 颜色则是由亮度(Y)和色度(U、V)组成的。因此,转换过程就是将 RGB 颜色分别转换为相应的 Y、U、V 。具体的数学计算公式可以通过在线转换器中的算法实现。 这样的在线转换器不仅简单易用,而且非常方便。如果您需要在任何地方进行颜色处理或者视频处理,只需要打开浏览器,访问这个网站,就可以快速地将 RGB 颜色转换为 YUV 颜色空间中的对应。 ### 回答3: 在线RGB颜色YUV转换器是一种网络工具,用于将RGB颜色格式转换为YUV颜色格式。RGB颜色格式是一种基于红色(R)、绿色(G)、蓝色(B)的颜色系统,广泛应用于电子设备显示屏幕、视频摄像头等领域;而YUV颜色格式则是一种基于亮度(Y)、色度(U)、色度(V)的颜色系统,主要用于数字视频压缩和传输中。 在线RGB颜色YUV转换器通常支持多种RGB和YUV颜色格式之间的转换,例如RGB24、RGB32、YUV444、YUV422、YUV420等格式。使用者可以将需要转换的RGB颜色输入到工具中,该工具将根据用户选定的RGB颜色格式自动进行转换,输出对应YUV颜色。这个转换过程是通过对RGB像素中红绿蓝通道进行加权处理,以获取亮度和两个色度信号得到的。 在线RGB颜色YUV转换器适用于多种应用场景,例如构建数字视频系统、进行数字视频编辑、对图像进行编码、解码等。它不仅能够提高工作效率,还可以防止人为转换错误所带来的一系列问题,为用户提供更加准确、可靠的颜色转换服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值