Преобразование цвета в OpenCV или SimpleCV - PullRequest
1 голос
/ 15 января 2012

Я посмотрел документацию, но не смог найти, был ли метод преобразования цветов для всего изображения с использованием некоторой формулы. Будет ли это как-то связано с функциями цветовой кривой, потому что я не слишком уверен, что это за эффекты - я пробовал их, но не понимаю, как влияет каждый параметр.

Например: если я хочу сделать изображение и изменить цвета, используя следующую формулу

(2R - 0,5G - B) / 4

Я читаю функции, и некоторые кажутся, что они могут применяться, но значение параметров мне неясно. Есть ли способ для SimpleCV и / или OpenCV, чтобы сделать это?

EDIT:

Под преобразованием я подразумеваю взять значения RGB изображения и применить к ним эту формулу, чтобы это были новые значения RGB. ИЛИ вместо формулы, чтобы использовать такую ​​матрицу:

[Г] [0,299 0,587 0,114] [Р]

[I] = [0,596 -0,274 -0,322] [G]

[Q] [0,212 -0,523 0,311] [B]

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Чтобы сделать это в 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 голосов
/ 16 января 2012

Зависит от того, какой интерфейс вы используете.

Если вы используете python, это довольно просто, так как изображения представлены в виде массивов.

Итак, чтобы получить изображение, которое было (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.

...