OpenCV – Invertir máscara

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:

Imagen original

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:

sin invertir la máscara

Máscara invertida

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:

Sin invertir la máscara

Máscara invertida

Publicación traducida automáticamente

Artículo escrito por 2018sauravtelge y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *