在OpenCV中转换Lab值到RGB值 [英] Converting Lab Values to RGB values in opencv

查看:2846
本文介绍了在OpenCV中转换Lab值到RGB值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想Lab值转换成其相应的RGB values​​.I不想实验室图像转换成RGB图像,但升的和函数应该安放的cvCvtColor某些值仅适用于images.Can有人告诉我如何做到这一点。

感谢;

code:

  *与CvMat RGB = cvCreateMat(centres->行,centres-> COLS,centres->类型);
cvCvtColor(中心,RGB,CV_Lab2BGR);


解决方案

我不知道该怎么做,在OpenCV的,但如果别的东西是好的我已经的实施在C 。见功能 color_Lab_to_LinearRGB color_LinearRGB_to_RGB

这里的code:

 双L,A,B;
双X,Y,Z;
双R,G,B;//实验室 - >归一化的XYZ(X,Y,Z都在0 ... 1)Y = L *(1.0 / 116.0)+ 16.0 / 116.0;
X = A *(1.0 / 500.0)+ Y;
Z = B *(-1.0 / 200.0)+ Y;X = X> 6.0 / 29.0? X * X * X:X *(108.0 / 841.0) - 432.0 / 24389.0;
Y = L> 8.0? Y * Y * Y:L *(27.0 / 24389.0);
ž= Z> 6.0 / 29.0? Z * Z * Z:Z *(108.0 / 841.0) - 432.0 / 24389.0;//归XYZ - >线性的sRGB(0 ... 1)R = X *(1219569.0 / 395920.0)+ Y *(-608687.0 / 395920.0)+ Z *(-107481.0 / 197960.0);
G = X *(-80960619.0 / 87888100.0)+ Y *(82435961.0 / 43944050.0)+ Z *(3976797.0 / 87888100.0);
B = X *(93813.0 / 1774030.0)+ Y *(-180961.0 / 887015.0)+ Z *(107481.0 / 93370.0);//线性的sRGB - >伽玛玉米pressed的sRGB(0 ... 1)R = R> 0.0031308? POW(R,1.0 / 2.4)* 1.055 - 0.055:R * 12.92;
G = G> 0.0031308? POW(G,1.0 / 2.4)* 1.055 - 0.055:G * 12.92;
B = B个0.0031308? POW(B,1.0 / 2.4)* 1.055 - 0.055:B * 12.92;

I am trying to convert the Lab values to its corresponding RGB values.I don't want to convert Lab image to RGB image but some values of L a and b.The function cvCvtColor only works for images.Can anybody tell me how to do this.

Thanks;

Code :

CvMat* rgb = cvCreateMat(centres->rows,centres->cols,centres->type);
cvCvtColor(centres,rgb,CV_Lab2BGR);

解决方案

I don't know how to do it in OpenCV, but if something else is alright I've implemented it in C. See function color_Lab_to_LinearRGB and color_LinearRGB_to_RGB.

Here's the code:

double L, a, b;
double X, Y, Z;
double R, G, B;

// Lab -> normalized XYZ (X,Y,Z are all in 0...1)

Y = L * (1.0/116.0) + 16.0/116.0;
X = a * (1.0/500.0) + Y;
Z = b * (-1.0/200.0) + Y;

X = X > 6.0/29.0 ? X * X * X : X * (108.0/841.0) - 432.0/24389.0;
Y = L > 8.0 ? Y * Y * Y : L * (27.0/24389.0);
Z = Z > 6.0/29.0 ? Z * Z * Z : Z * (108.0/841.0) - 432.0/24389.0;

// normalized XYZ -> linear sRGB (in 0...1)

R = X * (1219569.0/395920.0)     + Y * (-608687.0/395920.0)    + Z * (-107481.0/197960.0);
G = X * (-80960619.0/87888100.0) + Y * (82435961.0/43944050.0) + Z * (3976797.0/87888100.0);
B = X * (93813.0/1774030.0)      + Y * (-180961.0/887015.0)    + Z * (107481.0/93370.0);

// linear sRGB -> gamma-compressed sRGB (in 0...1)

R = R > 0.0031308 ? pow(R, 1.0 / 2.4) * 1.055 - 0.055 : R * 12.92;
G = G > 0.0031308 ? pow(G, 1.0 / 2.4) * 1.055 - 0.055 : G * 12.92;
B = B > 0.0031308 ? pow(B, 1.0 / 2.4) * 1.055 - 0.055 : B * 12.92;

这篇关于在OpenCV中转换Lab值到RGB值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆