Преобразование цвета в OpenCV или SimpleCV

1

Я просмотрел документацию, но не смог найти, был ли метод преобразования цветов для всего изображения с использованием какой-либо формулы. Будет ли это каким-то образом связано с функциями цветовой кривой, потому что я не слишком уверен в том, какие эффекты вы 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]

  • 0
    Что вы подразумеваете под «преобразованием»? Можете ли вы написать функцию для каждого цветового канала?
Теги:
opencv
colors
simplecv

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()
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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню