Зависит от того, какой интерфейс вы используете.
Если вы используете 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.