2012-01-15 103 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。