Utilice Bitwise_AND en una imagen usando OpenCV
Los operadores bit a bit se utilizan normalmente para realizar operaciones bit a bit en patrones de bits o números binarios que utilizan la manipulación de bits individuales. OpenCV utiliza este mismo concepto para manipular y extraer información de las imágenes.
En este artículo, veremos específicamente cómo utilizar Bitwise AND
utilizando la biblioteca Python OpenCV.
Operadores bit a bit en OpenCV
Los operadores bit a bit básicos utilizados en OpenCV son los siguientes.
Y bit a bit
O bit a bit
Bitbit NO
XOR bit a bit
Los operadores bit a bit se utilizan en OpenCV para que podamos extraer o filtrar la parte de una imagen, retratando la imagen y operando con ROI no rectangulares (Región de interés).
Utilice el operador Y bit a bit
en imágenes en OpenCV
En OpenCV, el operador Bitwise AND
se usa para combinar dos imágenes diferentes en una sola, o puede combinar alguna parte de una imagen en otra. Por lo general, calcula la combinación lógica bit a bit por elemento de dos matrices/escalares/imágenes.
OpenCV tiene un método incorporado para realizar operaciones bit a bit. Entonces, para el operador Bitwise AND
en OpenCV, usamos cv.bitwise_and()
.
Sintaxis de Python OpenCV bitwise_and()
cv.bitwise_and(src1, src2[, dst[, mask]]) -> dst
Parámetros
src1 |
primera matriz / imagen de entrada. |
src2 |
segunda matriz/imagen de entrada. |
dst |
imagen de salida con el mismo tamaño y tipo que la matriz de entrada. |
mask |
máscara de operación opcional, matriz de un solo canal de 8 bits que especifica los elementos de la matriz de salida que se cambiarán. |
Veamos cómo usar el operador Y bit a bit
en una imagen con un ejemplo que se muestra a continuación.
Primero, tenemos que importar OpenCV como cv
, y luego usando el método imread()
de OpenCV, tenemos que leer dos imágenes usando imread()
. Este método leerá la imagen proporcionada y devolverá los datos de la imagen en formato de matriz.
Ahora, tenemos que almacenar estos datos que son devueltos por imread()
dentro de las variables llamadas img1
e img2
. Antes de aplicar el Y bit a bit
, debe asegurarse de que las dos imágenes que está utilizando tengan la misma forma, es decir, el mismo ancho, alto y número de canales.
Si no está seguro de la forma de la imagen, puede usar el método shape()
de OpenCV de la siguiente manera.
Fragmento de código:
# import opencv
import cv2 as cv
# read the images
img1 = cv.imread("img1.jpg")
img2 = cv.imread("img2.jpg")
print("Shape of img_1 : ", img1.shape)
print("Shape of img_2 : ", img2.shape)
dimension = (img2.shape[1], img2.shape[0])
img1 = cv.resize(img1, dimension, interpolation=cv.INTER_AREA)
print("Shape of img_1 : ", img1.shape)
print("Shape of img_2 : ", img2.shape)
Producción :
Shape of img_1 : (4000, 6000, 3)
Shape of img_2 : (3133, 4700, 3)
Shape of img_1 : (3133, 4700, 3)
Shape of img_2 : (3133, 4700, 3)
En la mayoría de los casos, el tamaño de las dos imágenes no será el mismo, por lo que es posible que deba cambiar el tamaño de las imágenes utilizando el método cambiar tamaño ()
, como se muestra en el código anterior. En este caso, puede cambiar el tamaño de una imagen o los tamaños de ambas imágenes.
Para este ejemplo, cambiaremos el tamaño de img1
usando el método resize()
como el tamaño de img2
como se muestra arriba.
Fragmento de código:
bitwise_AND = cv.bitwise_and(img1, img2)
cv.imshow("Image-1", img1)
cv.imshow("Image-2", img2)
cv.imshow("Bitwise-AND", bitwise_AND)
cv.waitKey(0)
Ahora que tenemos las dos imágenes del mismo tamaño, podemos usar cv.bitwise_and()
para realizar una operación Bitwise AND
en las dos imágenes dadas y almacenar la salida en la variable llamada bitwise-AND
. Para mostrar todas las imágenes de entrada, salida y resultantes, utilizaremos la función imshow()
.
Estamos mostrando todas las imágenes para aclarar cómo se muestran las imágenes de entrada para la imagen de salida. Así es como se verá la salida del código anterior.
También usamos el método waitKey()
y le pasamos el valor 0
porque permite a los usuarios mostrar una ventana durante un período corto o hasta que se presiona cualquier tecla. Entonces, si se pasa 0
en el argumento, espera hasta que se presione cualquier tecla.
Así es como realizamos Bitwise AND
en dos imágenes del mismo tamaño.
Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.
LinkedIn