Capítulo 1: Primeros pasos con OpenCV
OpenCV es una biblioteca de visión por computadora de código abierto iniciada en 1999 por Gary Bradski de Intel. La biblioteca OpenCV está escrita en C y C ++, cubre más de 500 funciones en varios campos de la visión por computadora y puede ejecutarse en múltiples sistemas operativos. Su objetivo es proporcionar una interfaz concisa y eficiente para ayudar a los desarrolladores a construir rápidamente sistemas de visión.
Este capítulo presenta principalmente el uso simple de OpenCV
Operaciones básicas de procesamiento de imágenes:
Las operaciones más básicas del procesamiento de imágenes incluyen:
- leer imagen
- mostrar imagen
- guardar imagen
1. Lee la imagen:
Use la función cv2.imread() en OpenCV para leer la imagen, que admite varios formatos de imagen estática.
La sintaxis es: retval = cv2.imread( nombre de archivo[, banderas] )
- retval: valor devuelto, la imagen leída. Devuelve Ninguno si no se leyó ninguna imagen
- filename: Indica la ruta completa de la imagen a leer.
- banderas: es la bandera de lectura. Este indicador se utiliza para controlar el tipo de archivo de lectura, como se muestra en la siguiente tabla.
Nota: Los parámetros de la primera columna y la tercera columna de la tabla son equivalentes. Es decir: cv2.IMREAD_UNCHANGED = -1
valor | significado | valor |
---|---|---|
cv2.IMREAD_UNCHANGED | Mantener el formato original sin cambios | -1 |
cv2.IMREAD_GRAYSCALE | Cambiar el tamaño de la imagen a una imagen en escala de grises de un solo canal | 0 |
cv2.IMREAD_COLOR | Cambie el tamaño de la imagen a una imagen BGR de 3 canales. Este valor es el predeterminado | 1 |
cv2.IMREAD_ANYDEPTH | Cuando la profundidad de la imagen cargada es de 16 bits o 32 bits, devuelve la imagen de su profundidad correspondiente; de lo contrario, conviértala a una imagen de 8 bits | 2 |
cv2.IMREAD_ANYCOLOR | Leer una imagen en cualquier formato de color posible | 4 |
cv2.IMREAD_LOAD_GDAL | Cargue la imagen usando el controlador gdal | 8 |
cv2.IMREAD_REDUCED_GRAYSCALE_2 | Convierta la imagen a una imagen en escala de grises de un solo canal y reduzca el tamaño de la imagen a la mitad | |
cv2.IMREAD_REDUCED_COLOR_2 | Convierta la imagen a una imagen en color BGR de 3 canales y reduzca el tamaño de la imagen a la mitad | |
cv2.IMREAD_REDUCED_GRAYSCALE_4 | Convierta la imagen a una imagen en escala de grises de un solo canal y reduzca el tamaño de la imagen en 1/4 | |
cv2.IMREAD_REDUCED_COLOR_4 | Convierta la imagen a una imagen en color BGR de 3 canales y reduzca el tamaño de la imagen en 1/4 | |
cv2.IMREAD_REDUCED_GRAYSCALE_8 | Convierta la imagen a una imagen en escala de grises de un solo canal y reduzca el tamaño de la imagen en 1/8 | |
cv2.IMREAD_REDUCED_COLOR_8 | Convierta la imagen a una imagen en color BGR de 3 canales y reduzca el tamaño de la imagen en 1/8 | |
cv2.IMREAD_IGNORE_ORIENTATION | Girar imagen sin orientación EXIF como marcador |
La función cv2.imread() admite la lectura de muchos tipos diferentes de imágenes:
Por ejemplo: leer una imagen usando la función cv2.imread()
import cv2
lena = cv2.imread("sky.png")
print(lena)
2. Muestre la imagen:
OpenCV proporciona varias funciones relacionadas con la visualización:
-
función namedWidow:
-
utilizado para crear una ventana con el nombre especificado
-
Formato de gramática: Ninguno = cv2.namedWindow( winname ) donde winname se refiere al nombre de la ventana creada
Por ejemplo, cree una ventana llamada lecciónCV2.namedWindow("lesson")
-
función immostrar:
- utilizado para mostrar imágenes
- Formato de sintaxis: Ninguno = cv2.imshow( winname, mat ) donde winname es el nombre de la ventana y mat es la imagen que se mostrará.
Por ejemplo:
import cv2 lena = cv2.imread("lena.bmp") cv2.namedWindow("lesson") cv2.imshow("lesson", lena)
En el código anterior, primero lea la imagen lena.bmp a través de la función cv2.imread(), luego cree una ventana llamada lección a través de la función cv2.namedWindow() y finalmente muestre la imagen en la ventana de la lección a través de cv2.imshow () función lena.bmp.
Nota : en el uso real, también es posible no crear una ventana, usar directamente la función cv2.imshow() para referirse a un espacio de creación inexistente y mostrar la imagen especificada en él, como:
import cv2 lena = cv2.imread("lena.bmp") cv2.imshow("demo", lena)
-
Función de tecla de espera:
- Se usa para esperar la tecla, cuando el usuario presiona el teclado, la declaración se ejecutará y devolverá un valor
- Sintaxis: retval = cv2.waitKey([retraso])
- retval: Indica el valor de retorno. Si no se presiona ninguna tecla, devuelve -1; si hay una clave registrada, devuelve el código ASCII de la tecla
- retardo: Indica el tiempo de espera para el disparo del teclado, la unidad es ms. Cuando el valor es negativo o 0, significa esperar infinitamente. El valor predeterminado es 0
En el uso real, la tecla presionada se puede obtener a través de la función cv2.waitKey(), y se pueden realizar diferentes respuestas a diferentes teclas para realizar la función interactiva.
import cv2 lenam = cv2.imread("lena.png") cv2.imshow("demo", lena) key = cv2.waitKey() if key == ord("A"): CV2.imshow("PressA", lena) elif key == ord("B"): cv2.imshow("PressB", lena)
-
Función destruir ventana:
- Se utiliza para liberar (destruir) la ventana especificada
- Sintaxis: Ninguno = cv2.destroyWindow( winname ) winname es el nombre de la ventana
import cv2 lena = cv2.imread("lena.png") cv2.imshow("demo", lena) cv2.waitKey() cv2.destroyWindow("demo")
-
función destruir todas las ventanas
- Se utiliza para liberar (destruir) todas las ventanas
- Sintaxis: Ninguno = cv2.destroyAllWindows()
import cv2 lena = cv2.imread("lena.png") cv2.imshow("demo1", lena) cv2.imshow("demo2", lena) cv2.waitKey() cv2.destroyAllWindows()
3. Guarda la imagen
Use la función cv2.imwrite() en OpenCV para guardar la imagen, la sintaxis de esta función es:
- retval = cv2.imwrite( nombre de archivo , img [, parámetros ])
parámetro:
- retval: valor de retorno. Devuelve True si el guardado fue exitoso, False si falló
- nombre de archivo: la ruta completa del archivo de destino para guardar.
- img: la imagen a guardar
- params: guardar parámetros de tipo, opcional.
import cv2
lena = cv2.imread("lena.png")
r = cv2.imwrite("result.png", lena)
Introducción a la biblioteca de contribuciones de OpenCV
Actualmente, la biblioteca OpenCV consta de las siguientes dos partes:
- Biblioteca principal de OpenCV: la biblioteca OpenCV comúnmente instalada, que es madura y estable y es mantenida por el equipo principal de OpenCV
- Biblioteca de contribución de OpenCV: el nombre de la biblioteca de extensión es opencv_contrib, que es desarrollado y mantenido principalmente por la comunidad. Contiene aplicaciones visuales más completas que la biblioteca principal de OpenCV. Cabe señalar que la Biblioteca Contribuida de OpenCV contiene partes sin licencia de OpenCV y contiene algoritmos protegidos por patente. Por lo tanto, se debe prestar especial atención antes de utilizar este módulo.
- La biblioteca de contribuciones de OpenCV contiene muchos módulos de extensión:
- bioinspired: módulo de visión biológica
- conjuntos de datos: módulo de lectura de conjuntos de datos
- dnn: Módulo de red neuronal profunda
- cara: módulo de reconocimiento facial
- matlab: módulo de interfaz MATLAB
- Estéreo: módulo de combinación estéreo binocular
- texto: módulo de coincidencia de texto visual
- seguimiento: módulo de seguimiento de objetivos basado en la visión
- ximgpro: módulo de extensión de procesamiento de imágenes
- xobjdetect: módulo de detección de objetos 2D mejorado
- conjuntos de datos: módulo de lectura de conjuntos de datos
- dnn: Módulo de red neuronal profunda
- cara: módulo de reconocimiento facial
- matlab: módulo de interfaz MATLAB
- Estéreo: módulo de combinación estéreo binocular
- texto: módulo de coincidencia de texto visual
- seguimiento: módulo de seguimiento de objetivos basado en la visión
- ximgpro: módulo de extensión de procesamiento de imágenes
- xobjdetect: módulo de detección de objetos 2D mejorado
- xphoto: módulo de extensión de fotografía computacional