1

我查看了文档,但找不到使用某些公式转换整个图像颜色的方法。这是否与颜色曲线函数有某种关系,因为我不太确定它们有什么影响 - 我已经尝试过它们,但不明白每个参数有什么影响。

例如:如果我想拍摄图像并使用以下公式转换颜色

(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]

4

2 回答 2

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()
于 2012-01-16T21:52:36.217 回答
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 读取的。

于 2012-01-16T00:20:22.510 回答