在Opencv中将Lab值转换为RGB值

我试图将Lab值转换为相应的RGB值。我不想将Lab图像转换为RGB图像,而是将L a和b的某些值转换。函数cvCvtColor仅适用于图像。任何人都可以告诉我该怎么做这个。

谢谢;

代码:

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

我不知道如何在OpenCV中做到这一点,但如果其他的东西没问题,我已经在C中实现了它 。 请参阅函数color_Lab_to_LinearRGBcolor_LinearRGB_to_RGB

这是代码:

 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; 

我认为做你想做的事的唯一方法是:

  • 查看cvCvtColor的OpenCV源代码或文档并自己实现这些方程式(它们都在该页面上明确给出)
  • 创建一个虚拟图像,其中包含您想要转换的少量Lab值(例如1乘n乘3,其中n是要转换的值的数量),并使用cvCvtColor