En este artículo, aprenderemos cómo invertir una máscara creada en una imagen en OpenCV. El enmascaramiento es una técnica utilizada para resaltar un objeto específico de la imagen. Se puede definir como establecer ciertos píxeles de una imagen en un valor nulo como 0 (color negro) para que solo se resalte la parte de nuestra imagen donde el valor de píxel no es 0.
Invertir una máscara básicamente invierte todo el proceso, es decir, los píxeles en la parte resaltada se convierten en 0 y todos los demás píxeles permanecen distintos de cero. Para este propósito, realizamos bit a bit no en cada píxel para transponer (invertir) su valor.
Por ejemplo, si consideramos una máscara:
[ 0 1 0 0 0 0 0 1 0 ]
Ahora, para invertir esta máscara, realizamos una operación no bit a bit en cada valor, es decir, 0 cambia a 1 y viceversa:
[ 1 0 1 1 1 1 1 0 1 ]
Para invertir una máscara en OpenCV, usamos la función cv2.bitwise_not() , que realiza una operación bit a bit en píxeles individuales.
Sintaxis : cv2.bitwise_not(imagen_enmascarada)
Parámetros :
- masked_image: Es la imagen que se va a invertir.
- Valor devuelto: Devuelve la imagen enmascarada invertida.
Imagen usada:
Ejemplo 1: En este programa, comenzamos con la lectura de la imagen. Luego creamos un kernel de la array unitaria (5 X 5) de tipo de datos ‘int’. Ahora, convertimos la imagen al formato HSV ya que todas las operaciones se pueden realizar solo en formato HSV. Luego realizamos técnicas de erosión, transformación y dilatación en la imagen para crear la máscara. Ahora, para invertir la máscara, usamos bitwise_not el método de la biblioteca cv2 para cambiar los valores de píxel (0 ->1 y 1 ->0). Finalmente, mostramos esta imagen enmascarada invertida.
Python3
# Python program to explain # mask inversion on a b/w image. # importing cv2 and numpy library import cv2 import numpy as np # Reading an image img = cv2.imread('rgy.jpg') # The kernel to be used for dilation purpose kernel = np.ones((5, 5), np.uint8) # converting the image to HSV format hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # defining the lower and upper values of HSV, # this will detect yellow colour Lower_hsv = np.array([20, 70, 100]) Upper_hsv = np.array([30, 255, 255]) # creating the mask by eroding,morphing, # dilating process Mask = cv2.inRange(hsv, Lower_hsv, Upper_hsv) Mask = cv2.erode(Mask, kernel, iterations=1) Mask = cv2.morphologyEx(Mask, cv2.MORPH_OPEN, kernel) Mask = cv2.dilate(Mask, kernel, iterations=1) # Inverting the mask by # performing bitwise-not operation Mask = cv2.bitwise_not(Mask) # Displaying the image cv2.imshow('Mask', Mask) # waits for user to press any key # (this is necessary to avoid Python # kernel form crashing) cv2.waitKey(0) # closing all open windows cv2.destroyAllWindows()
Producción:
Ejemplo 2: Este programa es similar al explicado anteriormente. La única diferencia es que en lugar de convertir la imagen a blanco y negro, enmascaramos directamente la manzana amarilla y luego invertimos la máscara creada usando la operación bitwise_not.
Python3
# Python program to explain # mask inversion on a RGB image. # importing cv2 and numpy library import cv2 import numpy as np # Reading an image img = cv2.imread('rgy.jpg') # The kernel to be used for dilation # purpose kernel = np.ones((5, 5), np.uint8) # converting the image to HSV format hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # defining the lower and upper values # of HSV, this will detect yellow colour Lower_hsv = np.array([20, 70, 100]) Upper_hsv = np.array([30, 255, 255]) # creating the mask Mask = cv2.inRange(hsv, Lower_hsv, Upper_hsv) # Inverting the mask mask_yellow = cv2.bitwise_not(Mask) Mask = cv2.bitwise_and(img, img, mask = mask_yellow) # Displaying the image cv2.imshow('Mask', Mask) # waits for user to press any key cv2.waitKey(0) # closing all open windows cv2.destroyAllWindows()
Producción:
Publicación traducida automáticamente
Artículo escrito por 2018sauravtelge y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA