Я просмотрел документацию, но не смог найти, был ли метод преобразования цветов для всего изображения с использованием какой-либо формулы. Будет ли это каким-то образом связано с функциями цветовой кривой, потому что я не слишком уверен в том, какие эффекты вы have- я пробовал, но не понимаю, какое влияние оказывает каждый параметр.
Например: если я хочу взять изображение и преобразовать цвета, используя следующую формулу
(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]
Чтобы сделать это в 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()
Это зависит от того, какой интерфейс вы используете.
Если вы используете 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
Для матричных преобразований взгляните на функцию transform
OpenCV. Согласно документации, он выполняет:
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.