La imagen también se conoce como un conjunto de píxeles. Cuando almacenamos una imagen en computadoras o digitalmente, se almacenan sus valores de píxel correspondientes. Entonces, cuando leemos una imagen a una variable usando OpenCV en Python, la variable almacena los valores de píxel de la imagen. Cuando tratamos de transformar negativamente una imagen, las áreas más brillantes se transforman en las más oscuras y las áreas más oscuras se transforman en las más brillantes.
Como sabemos, una imagen en color almacena 3 canales diferentes. Son rojo, verde y azul. Es por eso que las imágenes en color también se conocen como imágenes RGB. Entonces, si necesitamos una transformación negativa de una imagen, entonces debemos invertir estos 3 canales.
Veamos 3 canales de una imagen en color trazándola en el histograma.
Imagen de entrada –
# We need cv2 module for image # reading and matplotlib module # for plotting import cv2 import matplotlib.pyplot as plt img_bgr = cv2.imread('scenary.jpg', 1) color = ('b', 'g', 'r') for i, col in enumerate(color): histr = cv2.calcHist([img_bgr], [i], None, [256], [0, 256]) plt.plot(histr, color = col) plt.xlim([0, 256]) plt.show()
Producción:
Aquí, los 3 canales (Rojo, Verde, Azul) se superponen y crean un solo histograma. Si ha estudiado antes sobre píxeles y RGB, puede saber que cada color contiene 256 valores. Si el valor RGB de un color es (255, 255, 255), ese color se muestra como blanco y si el valor RGB de un color es (0, 0, 0), ese color se muestra como negro. Así, los 3 canales anteriores también contienen 256 números de píxeles.
Entonces, el eje X muestra un total de 256 valores (0 – 255) y el eje Y muestra las frecuencias totales de cada canal. Como puede ver en el histograma, el canal azul tiene la frecuencia más alta y puede marcar fácilmente la cantidad de color azul presente en la imagen al mirarlo.
Transformación negativa de la imagen.
Vamos a crear una transformación negativa de la imagen. Hay 2 formas diferentes de transformar una imagen en negativo usando el módulo OpenCV. El primer método explica la transformación negativa paso a paso y el segundo método explica la transformación negativa de una imagen en una sola línea.
Primer método: Pasos para la transformación negativa
- leer una imagen
- Obtener alto y ancho de la imagen.
- Cada píxel contiene 3 canales. Entonces, tome un valor de píxel y recopile 3 canales en 3 variables diferentes.
- Niegue los valores de 3 píxeles de 255 y guárdelos nuevamente en el píxel usado anteriormente.
- Hágalo para todos los valores de píxeles presentes en la imagen.
Código de Python para el primer método: –
import cv2 import matplotlib.pyplot as plt # Read an image img_bgr = cv2.imread('scenary.jpg', 1) plt.imshow(img_bgr) plt.show() # Histogram plotting of the image color = ('b', 'g', 'r') for i, col in enumerate(color): histr = cv2.calcHist([img_bgr], [i], None, [256], [0, 256]) plt.plot(histr, color = col) # Limit X - axis to 256 plt.xlim([0, 256]) plt.show() # get height and width of the image height, width, _ = img_bgr.shape for i in range(0, height - 1): for j in range(0, width - 1): # Get the pixel value pixel = img_bgr[i, j] # Negate each channel by # subtracting it from 255 # 1st index contains red pixel pixel[0] = 255 - pixel[0] # 2nd index contains green pixel pixel[1] = 255 - pixel[1] # 3rd index contains blue pixel pixel[2] = 255 - pixel[2] # Store new values in the pixel img_bgr[i, j] = pixel # Display the negative transformed image plt.imshow(img_bgr) plt.show() # Histogram plotting of the # negative transformed image color = ('b', 'g', 'r') for i, col in enumerate(color): histr = cv2.calcHist([img_bgr], [i], None, [256], [0, 256]) plt.plot(histr, color = col) plt.xlim([0, 256]) plt.show()
Producción :
(Original image and it’s histogram)
(Negative image and it’s histogram)
2do método: Pasos para la transformación negativa
- Lee una imagen y guárdala en una variable.
- Resta la variable de 1 y almacena el valor en otra variable.
- Todo listo. Has realizado con éxito la transformación negativa.
Código de Python para el segundo método: –
import cv2 import matplotlib.pyplot as plt # Read an image img_bgr = cv2.imread('scenary.jpg', 1) plt.imshow(img_bgr) plt.show() # Histogram plotting of original image color = ('b', 'g', 'r') for i, col in enumerate(color): histr = cv2.calcHist([img_bgr], [i], None, [256], [0, 256]) plt.plot(histr, color = col) # Limit X - axis to 256 plt.xlim([0, 256]) plt.show() # Negate the original image img_neg = 1 - img_bgr plt.imshow(img_neg) plt.show() # Histogram plotting of # negative transformed image color = ('b', 'g', 'r') for i, col in enumerate(color): histr = cv2.calcHist([img_neg], [i], None, [256], [0, 256]) plt.plot(histr, color = col) plt.xlim([0, 256]) plt.show()
Producción :
(Original image and it’s histogram)
(Negative image and it’s histogram)
Publicación traducida automáticamente
Artículo escrito por pankajpatra1998 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA