OpenCV或SimpleCV中的颜色转换

时间:2012-01-15 15:28:10

标签: python c opencv colors 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]

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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读入。