2012-01-15 100 views
1

我已經看過文檔,但是我找不到是否有一種方法使用某些公式來轉換整個圖像的顏色。這是否會與顏色曲線功能有關,因爲我不太確定這些效果 - 我嘗試過它們,但不明白每個參數會產生什麼效果。OpenCV或SimpleCV中的顏色變換

例如:如果我想拍攝圖像,並使用下面的公式變換分析的顏色

(2R - 0.5G - B)/ 4

我通過功能讀取和一些看起來他們可能適用,但參數的含義不清楚給我。有沒有SimpleCV和/或OpenCV的方法來做到這一點?

編輯:

通過改造,我的意思是把圖像的RGB值和公式適用於他們,所以這些都是新的RGB值。或者代替一個公式,使用矩陣狀:

[Y] [0.299 0.587 0.114] [R]

[I] = [0.596 -0.274 -0.322] [G]

[ Q] [0.212 -0.523 0.311] [B]

+0

什麼你的意思是「改造」?你能寫出每個顏色通道的功能嗎? – Blender 2012-01-15 15:31:20

回答

2

爲此在SimpleCV你只是做:

from SimpleCV import * 
img = Image('simplecv') 
(r,g,b) = img.splitChannels(False) #we pass false to break into color channels, not greyscale 
updated = ((r * 2) - (g * 0.5) - b)/4 
updated.show() 
0

它取決於您正在使用的界面。

如果你使用python,它非常簡單,因爲圖像被表示爲numpy數組。

因此,要獲得這是一個圖像(2R - 0.5G - B)/ 4,你可以這樣做:

imgF = img.astype('float') # convert from INT to FLOAT 
# note that OpenCV loads it as Blue,Green,Red. not RGB. 
imgTransformed = (2.*imgF[:,:,2] - .5*imgF[:,:,1] - imgF[:,:,0])/4 

矩陣變換,看看OpenCV的的transform功能。 作爲每文檔時,其執行:

dest(I) = mtx * src(I) 

每個索引I

所以對於你的問題的矩陣例子,你會做

cv2.transform(img, [ [ 0.114, 0.587, 0.299], 
         [-0.322, 0.274, 0.596], 
         [ 0.311,-0.523, 0.212] ]) 

注 - 我換你的列1和3,因爲在OpenCV中的圖像與通道順序B,G,R,而不是閱讀的R,G,B。