2012-02-21 68 views
4

我想Lab值轉化成其相應RGB values.I不想實驗室圖像轉換成RGB圖像,但只有升的和功能應該安放的cvCvtColor某些值爲圖像工作。可以有人告訴我如何做到這一點。轉換Lab值到RGB值的OpenCV

謝謝;

代碼:

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

回答

9

我不知道如何在OpenCV中做到這一點,但如果別的東西沒問題,我已經implemented it in 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; 
+0

謝謝。讓我試試這個。 – ATG 2012-02-21 05:42:46

+0

我試過,但RGB值不在範圍.. – ATG 2012-02-21 06:24:18

+0

RGB是介於0到1。我想你想要0 ... 255?只需將每個組件乘以255. – 2012-02-21 16:24:13

0

我覺得做你想要什麼的唯一方式是:

  • 看看OpenCV的源代碼或documentation for cvCvtColor和落實方程式自己(他們都明確地該網頁上給出)
  • 創建你想用n 3,其中n是要轉換),並使用圍繞cvCvtColor值的數量轉換(比如1爲數不多的Lab值的虛擬圖像。
+0

感謝您reply..Can請你解釋this.Because我已經使用這個功能cvtColor,但它給我error.I我將我所使用的代碼。 – ATG 2012-02-21 05:37:31