Espero que la entrada anterior halla quedado completamente clara y se halla entendido como poder mostrar una imagen en python usando OpenCV. Los ejemplos que vienen con las librerias son una buena fuente de informacion para ver como funcionan en conjuntos con python, sin embargo algunos ejemplo son bastante complicados por lo que es bueno comenzar desde lo basico y asi poder entender ejemplo complejos mas adelante.
En esta entrada, el objetivo es realizar un programa que muestre un video en una ventana, la verdad no es algo muy complicado pero es necesario si queremos llegar a hacer algo mas complejo.
Primero tenemos que tener en cuenta si queremos obtener el video desde una camara o desde un archivo de video, aqui lo haremos de las dos formas
Resultado:
Codigo:
Como vemos aparecen cosas nuevas y algunas aparecian en el ejemplo para mostrar una imagen, vamos a explicar las lineas que no habian aparecido antes.
capture= cv.CaptureFromCAM(1) - esta funcion sirve para capturar un video desde una camara, en este punto es bueno saber que un video no es mas sino una sucesion de imagenes. el argumento que le pasamos indica el indice de la camara que vamos a usar, y el video se va guardando en la variable capture.
#capture=cv.CreateFileCapture("C:\\parche.avi") - esta linea es un comentario, ya que, o capturamos el video desde la camara o capturamos el video desde un archivo. Al igual que con la imagen debemos especificar la ruta del archivo
while True:
img = cv.QueryFrame(capture)
cv.ShowImage("camera", img)
if cv.WaitKey(30) == 27:
break
Como un video es una sucesion de imagenes, debemos hacer un ciclo eterno que muestre una imagen cada tiempo determinado. la funcion cv.QueryFrame muestra el frame actual en el que esta el video y lo pone en la variable img despues hacemos lo mismo que en el ejemplo de mostrar fotos en el que usamos la funcion ShowImage y seleccionamos la ventana ya creada.
como tenemos que poner un tiempo para mostrar cada foto, usamos la funcion cv.WaitKey en este caso le pasamos como argumento el valor 30, para mostrar la imagen cada 30ms, la funcion espera el tiempo que se le pasa como argumento para que se presione una tecla. Cuando se presiona una tecla la funcion toma el valor ASCII de la tecla que se presiono, en este ejemplo pregunto mediante un if cuando la funcion WaitKey tenga el valor 27 que corresponde a la tecla esc, rompe el ciclo while por medio de la instruccion break y se termina el programa
Aqui termina la entrada de este ejemplo, espero que halla quedado lo suficientemente claro, cualquier duda o comentario sera bien recibido.
Hasta luego
Notar que en Linux, el numero de las cámaras comienzan en 0 y no en 1 (según el numero de cámaras conectadas, claro está).
ResponderEliminarcaptura=cv.CaptureFromCAM(0)
Linux usa V4L para capturar imágenes, por lo que una WebCam, una capturadora de tv, etc, es posible capturarlo desde ahí.
Gracias por tu comentario. No sabia lo del indice en linux...
ResponderEliminargracias por el tuto amigo en el codigo de python para capturar de archivo la orden es
ResponderEliminarcapture=cv.CaptureFromFile("C:\\parche.avi")
o asi fue que a mi me funciono
saludos
Rafael; pude acceder a la camara web, pero no puedo abrir el archivo avi. probe con distintos videos de distintas duraciones y nada...use capurefromfile y createfilecapture y nada, se cierra de una..Agregaste agun codec al sistema para que funcione???
ResponderEliminarGracias
SAludos
Gracias por tu comentario y con respecto al codec no había nada del otro mundo. Si el video reproduce en cualquier reproductor instalado no debería existir problema para usarlo aquí.
ResponderEliminarSaludos
Buenas noches. tengo una pregunta:
ResponderEliminaresto funciona en Linux?
Y otra: se requiere alguna librería o mídulo en especial?
import cv2
ResponderEliminarcap=cv2.VideoCapture() #Creamos la captura de video en el objeto 'cap'
obj=cap.open('12.flv') #este método le asigna un true o false a 'obj'
if obj==True:
while(True):
f,frame=cap.read() #frame obtiene los píxeles del fotograma actual
if f==False: #f devuelve 'False' si llegamos al final del video
break
frame=cv2.resize(frame,(640,480)) #Indicador de resolución de pantalla**
cv2.imshow('UNNOBA - LA COMPUTADORA - CURSO PREUNIVERSITARIO 2014',frame)
ch=cv2.waitKey(20)
if ch==27: #Con esto apagamos el video, es la tecla Esc (ASCII 27)**
break
cap.release() #liberamos el video almacenado como objeto cap
cv2.destroyAllWindows()