2012-04-06 30 views
8

decir que tuvimos una imagen que de alguna manera modificar a través OPENCV:OpenCV: cómo aplicar el mapa de degradado del arco iris en una imagen?

enter image description here

Y ahora nos gustaría aplicar a ella Gradient Map (like one we can apply via photoshop):

enter image description here

así que me pregunto cómo aplicar mapa de degradado (colores del arco iris) a través de openCV?

+1

Bueno, no sé nada sobre OpenCV, pero el proceso se divide en dos partes, RGB a escala de grises, y luego escala de grises a RGB usando ese gradiente. Ver [aquí] (http://nashruddin.com/opencv-examples-for-operation-on-images.html/5) para la primera parte, y [aquí] (http://stackoverflow.com/questions/6686868/opencv-color-mapping-with-direct-pixel-access) para el segundo. – scientiaesthete

Respuesta

12

Este es un método para crear imágenes falsas/pseudocolor utilizando Python, la conversión a C++ debería ser muy sencilla. Descripción general:

  1. Abra la imagen en escala de grises, RGB y
  2. convertir la imagen RGB a HSV (Tono, Saturación, Valor/Brillo) espacio de color. Este es un espacio cilíndrico, con matiz representado por un único valor en el eje polar.
  3. Establezca el canal de tono en la imagen en escala de grises que ya abrimos, este es el paso crucial.
  4. Establezca el valor y los canales de saturación en valores máximos.
  5. Convertir de nuevo a espacio RGB (de lo contrario, la visualización será incorrecta).

Hay un par de capturas aunque ...

  1. Como Hue se mantiene en grados y el espectro de color se representa de 0 a 180 (no 0-256 y 0-360 no (a veces el caso)), tenemos que cambiar la escala de la imagen en escala de grises de manera apropiada multiplicando por 180/256.0
  2. En el caso de opencv, la escala de colores del matiz comienza en azul (no en rojo, como en su imagen). es decir. la asignación es la siguiente:

de: enter image description here a: enter image description here

Si esto es importante para cambiar podemos hacerlo mediante la compensación de todos los elementos de tono y envolviéndolos alrededor de 180 (de lo contrario saturará). El código hace esto enmascarando la imagen en este punto de corte y luego compensando apropiadamente. El uso de un desplazamiento de 120, genera su ColorScale:

de: enter image description here a: enter image description here

y la imagen procesada de esta manera parece coincidir con el suyo muy bien (al final).

import cv 

image_bw = cv.LoadImage("TfBmw.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE) 
image_rgb = cv.LoadImage("TfBmw.jpg") 

#create the image arrays we require for the processing 
hue=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
sat=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
val=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
mask_1=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
mask_2=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 

#convert to cylindrical HSV color space 
cv.CvtColor(image_rgb,image_rgb,cv.CV_RGB2HSV) 
#split image into component channels 
cv.Split(image_rgb,hue,sat,val,None) 
#rescale image_bw to degrees 
cv.ConvertScale(image_bw, image_bw, 180/256.0) 
#set the hue channel to the greyscale image 
cv.Copy(image_bw,hue) 
#set sat and val to maximum 
cv.Set(sat, 255) 
cv.Set(val, 255) 

#adjust the pseudo color scaling offset, 120 matches the image you displayed 
offset=120 
cv.CmpS(hue,180-offset, mask_1, cv.CV_CMP_GE) 
cv.CmpS(hue,180-offset, mask_2, cv.CV_CMP_LT) 
cv.AddS(hue,offset-180,hue,mask_1) 
cv.AddS(hue,offset,hue,mask_2) 

#merge the channels back 
cv.Merge(hue,sat,val,None,image_rgb) 
#convert back to RGB color space, for correct display 
cv.CvtColor(image_rgb,image_rgb,cv.CV_HSV2RGB) 

cv.ShowImage('image', image_rgb) 
# cv.SaveImage('TfBmw_120.jpg',image_rgb) 
cv.WaitKey(0) 

Su imagen procesada con offset = 120:

enter image description here

+0

@ ¿Qué pasa si queremos utilizar el espacio de color degradado de photoshop en imágenes como aquí http://www.fudgegraphics.com/2008/10/create-a-realistic-outer-space-scene-in-photoshop/ mediante el uso de opencv – AHF

0

Ahora existe la función de llamada OPENCV applyColorMap lo que hace que este proceso trivial.El siguiente código hará el truco

image_cm = cv2.applyColorMap(image, cv2.COLORMAP_JET)) 

Y este es el resultado:

Original plane Figura 1: Plano original Plane after applying colormap Figura 2: Plano después de aplicar el mapa de colores

Cuestiones relacionadas