2012-01-15 3 views
1

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

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

(2R - 0.5G - B)/4

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

EDIT:

По преобразования, я имею в виду иметь значения 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

ответ

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 

Для матрицы трансформирует, взглянуть на 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.