opencv

Visión por computadora conceptos básicos

Visión por computadora conceptos básicos
Opencv (Biblioteca de visión por computadora de código abierto) es un módulo de Python utilizado para la visión por computadora. OpenCV es un módulo gratuito de código abierto que contiene cientos de algoritmos para realizar diversas tareas. Cualquier cosa, desde el reconocimiento facial hasta la detección de movimiento, se puede hacer usando OpenCV. Sin embargo, en esta guía, veremos los conceptos básicos de OpenCV.

Primero, instalemos OpenCV:

pip3 instalar opencv-python

Leer y mostrar imágenes

Lo primero que debemos aprender es a leer y escribir imágenes. Leer un archivo de imagen, ingresar la ruta completa al archivo o el nombre del archivo (si el archivo está en la carpeta de Python) y agregar una bandera se realiza usando cv2.Estoy leído(). La bandera puede tomar el valor de 1 (para una imagen en color), 0 (para escala de grises) o -1 (para imagen en color con canales). Uno puede usar el cv2.función imshow () para mostrar la imagen; aquí, se pasan dos argumentos: un nombre para la imagen y la imagen para mostrar. A continuación, usamos el cv2.función waitKey () para esperar una entrada de teclado; un 0 para el cv2.La función waitKey (0) implica un tiempo de espera permanente. Por otro lado, el cv2.La función destroyAllWindows () cerrará las ventanas.

Esto leerá y abrirá una imagen, y mantendrá la imagen abierta hasta que la cierre:

importar cv2
imagen = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('imagen', imagen)
cv2.waitKey (0)
cv2.destroyAllWindows ()

Escribir imágenes

Usamos el cv2.Función imwrite () para guardar una imagen. Esta función toma dos parámetros: un nombre para guardar la imagen y la imagen que desea guardar.

importar cv2
imagen = cv2.imread ('identificar.jpg ', -1)
cv2.imwrite ('guardar_imagen.png ', imagen)

Capturar video desde la cámara web

Para capturar videos, comenzamos inicializando el cv2.Función VideoCapture (). Luego usamos un bucle "while" para continuar capturando el video. Mientras el usuario no presione la tecla de salida, podemos leer los marcos y mostrarlos usando read () y cv2.función imshow (). Luego colocamos una tecla de "interrupción" para salir del bucle; en este caso, el número 27 es la tecla ESC. Si el usuario presiona la tecla ESC, sale del bucle. Una vez fuera del bucle, es necesario liberar la captura.

importar numpy como np
importar cv2
capture = cv2.VideoCapture (0)
while (Verdadero):
ret, frame = capturar.leer()
cv2.imshow ('marco', marco)
si cv2.waitKey (1) y 0xFF == 27:
rotura
capturar.lanzamiento()
cv2.destroyAllWindows ()

Reproducción de un archivo de video

Reproducir un archivo de video es como capturar un video desde una cámara web. Para hacer esto, el cv2.Se utiliza la función VideoCapture (); el nombre del archivo de video que desea reproducir se agrega a la función. El ciclo "while" se usa de nuevo, y la tecla de salida, en este caso, es la tecla "s" del teclado. Esto abrirá y reproducirá el archivo de video y lo cerrará cuando el usuario presione la tecla "s".

importar numpy como np
importar cv2
capture = cv2.VideoCapture ("Megamind.avi ")
while (Verdadero):
ret, frame = capturar.leer()
cv2.imshow ('marco', marco)
si cv2.waitKey (1) & 0xFF == ord ("s"):
rotura
capturar.lanzamiento()
cv2.destroyAllWindows ()

Guardar un archivo de video

Guardar un archivo de video requiere un poco más de trabajo. El cv2.La función VideoWriter () toma 4 parámetros en total: el nombre del archivo de salida, el código FourCC, el número de cuadros por segundo y el tamaño del cuadro. Además, se debe especificar el código FourCC, que es el códec de video que usa el cv2.Función VideoWriter_fourcc (). Usando la captura.isOpened (), leemos el marco y escribimos el marco de salida. También podemos mostrar los marcos usando el cv2.función imshow (). Entonces, usamos cv2.waitKey (1) & 0xFF == ord ('s') para establecer una clave de salida. En este caso, si el usuario presiona la tecla "s", saldrá del bucle y luego liberará la captura y la salida y cerrará las ventanas.

importar numpy como np
importar cv2
capture = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
salida = cv2.VideoWriter ('salida.avi ', fourcc, 30.0, (640,480))
mientras (capturar.está abierto()):
ret, frame = capturar.leer()
producción.escribir (marco)
cv2.imshow ('marco', marco)
si cv2.waitKey (1) & 0xFF == ord ('s'):
rotura
capturar.lanzamiento()
producción.lanzamiento()
cv2.destroyAllWindows ()

Dibujar líneas, círculos, rectángulos y textos

Lo primero que aprenderemos a dibujar es una línea. Para dibujar una línea, simplemente usamos el cv2.función line (). La función toma 5 argumentos: el video de origen, el punto de inicio, el punto de finalización, el color y el grosor de la línea. En el siguiente caso, hemos decidido dibujar un borde rectangular (formado por 4 líneas):

importar cv2
capture = cv2.VideoCapture ('vtest.avi ')
mientras que es verdadero:
ret, frame = capturar.leer()
ancho = int (captura.obtener (3))
altura = int (captura.obtener (4))
línea1 = cv2.línea (marco, (0,0), (0, altura), (255, 255, 255), 10)
línea2 = cv2.línea (línea1, (0, 0), (ancho, 0), (255, 255, 255), 10)
línea3 = cv2.línea (línea2, (0, alto), (ancho, alto), (255, 255, 255), 10)
línea4 = cv2.línea (línea3, (ancho, 0), (ancho, alto), (255, 255, 255), 10)
cv2.imshow ('marco', línea 4)
si cv2.waitKey (40) == ord ('q'):
rotura
capturar.lanzamiento()
cv2.destroyAllWindows ()

A continuación, dibujaremos un círculo y un rectángulo en el video. Para dibujar un rectángulo, usamos el cv2.función rectangle (), que toma 5 argumentos muy parecidos a la línea. Para dibujar un círculo, usamos la función cv2.circle (), que también toma 5 argumentos: el video de origen, el punto central, el radio, el color y el grosor.

importar cv2
capture = cv2.VideoCapture ('vtest.avi ')
mientras que es verdadero:
ret, frame = capturar.leer()
ancho = int (captura.obtener (3))
altura = int (captura.obtener (4))
rectángulo = cv2.rectángulo (marco, (150, 15), (650, 550), (0,0,0), 11)
cv2.círculo (rectángulo, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('marco', marco)
si cv2.waitKey (40) == ord ('q'):
rotura
capturar.lanzamiento()
cv2.destroyAllWindows ()

Ahora, agreguemos algo de texto al video que tenemos. Para hacer esto, necesitamos especificar una fuente; aquí, elegimos cv2.FONT_HERSHEY_SIMPLEX. Una vez seleccionada la fuente, podemos usar la función cv2.putText () para hacer el resto. CV2.putText () toma 8 argumentos: el video de origen, el texto que desea escribir, la posición donde lo desea, la fuente, la ampliación, el color, el grosor y cv2.LINE_AA (que hace que todo se vea mejor).

importar cv2
capture = cv2.VideoCapture ('vtest.avi ')
mientras que es verdadero:
ret, frame = capturar.leer()
ancho = int (captura.obtener (3))
altura = int (captura.obtener (4))
font = cv2.FONT_HERSHEY_SIMPLEX
imagen = cv2.putText (frame, "VTEST.AVI ", (200, 200), fuente, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('marco', imagen)
si cv2.waitKey (40) == ord ('q'):
rotura
capturar.lanzamiento()
cv2.destroyAllWindows ()

OpenCV es capaz de muchas cosas geniales en las que uno debe comenzar en alguna parte. Podría ser aprender a crear y guardar imágenes y videos. En este tutorial, aprendimos a hacer los conceptos básicos de la visión por computadora.

Codificación feliz!

Cómo mostrar el contador de FPS en juegos de Linux
Los juegos de Linux obtuvieron un gran impulso cuando Valve anunció el soporte de Linux para el cliente Steam y sus juegos en 2012. Desde entonces, mu...
Cómo descargar y jugar Sid Meier's Civilization VI en Linux
Introducción al juego Civilization 6 es una versión moderna del concepto clásico introducido en la serie de juegos Age of Empires. La idea era bastant...
Cómo instalar y jugar a Doom en Linux
Introducción a Doom La serie Doom se originó en los años 90 después del lanzamiento del Doom original. Fue un éxito instantáneo y, desde ese momento e...