L'aritmetica semplice negli array numpy è la più veloce, come ha commentato Abid Rahaman K.
Usa questa immagine per esempio: http://i.imgur.com/Yjo276D.png
Ecco un po 'di elaborazione delle immagini che assomiglia luminosità/contrasto manipolazione:
'''
Simple and fast image transforms to mimic:
- brightness
- contrast
- erosion
- dilation
'''
import cv2
from pylab import array, plot, show, axis, arange, figure, uint8
# Image data
image = cv2.imread('imgur.png',0) # load as 1-channel 8bit grayscale
cv2.imshow('image',image)
maxIntensity = 255.0 # depends on dtype of image data
x = arange(maxIntensity)
# Parameters for manipulating image data
phi = 1
theta = 1
# Increase intensity such that
# dark pixels become much brighter,
# bright pixels become slightly bright
newImage0 = (maxIntensity/phi)*(image/(maxIntensity/theta))**0.5
newImage0 = array(newImage0,dtype=uint8)
cv2.imshow('newImage0',newImage0)
cv2.imwrite('newImage0.jpg',newImage0)
y = (maxIntensity/phi)*(x/(maxIntensity/theta))**0.5
# Decrease intensity such that
# dark pixels become much darker,
# bright pixels become slightly dark
newImage1 = (maxIntensity/phi)*(image/(maxIntensity/theta))**2
newImage1 = array(newImage1,dtype=uint8)
cv2.imshow('newImage1',newImage1)
z = (maxIntensity/phi)*(x/(maxIntensity/theta))**2
# Plot the figures
figure()
plot(x,y,'r-') # Increased brightness
plot(x,x,'k:') # Original image
plot(x,z, 'b-') # Decreased brightness
#axis('off')
axis('tight')
show()
# Close figure window and click on other window
# Then press any keyboard key to close all windows
closeWindow = -1
while closeWindow<0:
closeWindow = cv2.waitKey(1)
cv2.destroyAllWindows()
immagine originale in scala di grigi:

Immagine luminosa che sembra dilatata:

immagine Darkened che sembra essere eroso, affilato, con maggior contrasto:

Come le intensità dei pixel si stanno trasformando:

Se gioca con i valori di phi
e theta
puoi diventare davvero interessante tcomes. Puoi anche implementare questo trucco per i dati delle immagini multicanale.
--- EDIT ---
uno sguardo ai concetti di 'livelli' e 'curve' su this youtube video che mostrano l'editing di immagini in Photoshop. L'equazione per la trasformazione lineare crea la stessa quantità di "livello" di cambiamento su ogni pixel. Se si scrive un'equazione che può discriminare tra tipi di pixel (ad esempio quelli che sono già di un certo valore), è possibile modificare i pixel in base alla "curva" descritta da tale equazione.
Sarebbe già più veloce. È solo un'aggiunta e una moltiplicazione. –
Le operazioni di addizione e moltiplicazione possono essere eseguite contemporaneamente per ottenere effetti interessanti. Fondamentalmente, ogni pixel può essere trasformato come 'X = aY + b' dove' a' e 'b' sono scalari. Questa è una trasformazione lineare.Ho mostrato una trasformazione quadratica nelle risposte che produce risultati molto più interessanti;) – samkhan13