首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RGB转换为YCbCr -C代码

将RGB转换为YCbCr -C代码
EN

Stack Overflow用户
提问于 2011-08-17 00:46:07
回答 2查看 22.9K关注 0票数 8

在我的最后一个项目中,我需要将RGB转换为YCbCr,并且我试图这样做(我正在用C语言编程):

代码语言:javascript
复制
/* Autor: Vinicius Garcia
 * Data : 09.ago.2011
 * 
 * Função que converte um pixel RGB em YCbCr
 * 
 * param : int R valor do pixel no canal red
 * param : int G valor do pixel no canal green
 * param : int B valor do pixel no canal blue
 * return: int* vetor de inteiros com os valores H, S e V calculados - nesta ordem
 */
int* converter_RGB_para_YCbCr(int R, int G, int B){
    int* YCbCr = (int*) malloc(3 * sizeof(int));

    double delta = 128.0; //Constante necessaria para o calculo da conversão de cor
    double Y  = (0.299 * R + 0.587 * G + 0.114 * B);
    double Cb = ((B - Y) * 0.564 + delta);
    double Cr = ((R - Y) * 0.713 + delta);

    YCbCr[0] = (int) Y;
    YCbCr[1] = (int) Cb;
    YCbCr[2] = (int) Cr;
    return YCbCr;
}

但这对我没用!

我与cvCvtColor (来自OpenCv库)进行了比较,结果不匹配:

代码语言:javascript
复制
            R = 88,  G  = 76,   B = 78
cvCvtColor: Y = 80,  Cb = 127, Cr = 134
myfunction: Y = 382, Cb = 132, Cr = 132 (cr and cr are always equal!)

我真的需要帮助,我试着做了很长一段时间,但我没有找到任何答案,我的怀疑。

你们认为我搞错了RGB的价值观吗?我就是这样做的:

代码语言:javascript
复制
uchar B = CV_IMAGE_ELEM(img_RGB, uchar, linha, coluna * 3);
uchar G = CV_IMAGE_ELEM(img_RGB, uchar, linha, coluna * 3 + 1);
uchar R = CV_IMAGE_ELEM(img_RGB, uchar, linha, coluna * 3 + 2);

然后我以这样的方式调用我的转换函数:

代码语言:javascript
复制
converter_RGB_para_YCbCr(R, G, B);

我的函数是int R,int G,int B,但是我传递的是uchar B,uchar G,uchar R,好吗?

EN

回答 2

Stack Overflow用户

发布于 2011-08-17 00:58:15

代码语言:javascript
复制
int y  = (int)( 0.299   * R + 0.587   * G + 0.114   * B);
int cb = (int)(-0.16874 * R - 0.33126 * G + 0.50000 * B);
int cr = (int)( 0.50000 * R - 0.41869 * G - 0.08131 * B);
票数 7
EN

Stack Overflow用户

发布于 2012-11-28 23:56:44

您应该使用这个公式matlab使用它。

Y=0.257R‘+0.504G’+0.098B‘+ 16

Cb =-0.148R‘-0.291G’+0.439B‘+ 128

Cr =0.439R‘-0.368G’-0.071B‘+ 128

还有rgb

R‘= 1.164(Y - 16) + 1.596(Cr - 128)

G‘= 1.164(Y - 16) - 0.813(Cr - 128) - 0.392(Cb - 128)

B‘= 1.164(Y - 16) + 2.017(Cb - 128)

我在一个软件中测试了它们,使它们正常工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7086820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档