Primero, instalemos OpenCV:
pip3 instalar opencv-pythonLeer 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 cv2imagen = 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 cv2imagen = 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 npimportar 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 npimportar 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 npimportar 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 cv2capture = 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 cv2capture = 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 cv2capture = 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!