Saltar al contenido

Opción de bucle de reproducción en videos OpenCV

Encontramos la contestación a este inconveniente, o por lo menos eso deseamos. Si presentas preguntas coméntalo y sin dudarlo te responderemos

Solución:

Para python3, opencv3.1.0, raspberry pi 3

import numpy as np
import cv2
cap = cv2.VideoCapture('intro.mp4')
while(cap.isOpened()):

    ret, frame = cap.read() 
    #cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
    #cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)

    if ret:
        cv2.imshow("Image", frame)
    else:
       print('no video')
       cap.set(cv2.CAP_PROP_POS_FRAMES, 0)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


cap.release()
cv2.destroyAllWindows()

Lo resolví parcialmente reemplazando vidFile.set (cv2.cv.CV_CAP_PROP_POS_FRAMES, 1) por vidFile.set(cv2.cv.CV_CAP_PROP_POS_AVI_RATIO, 0)aunque esto solo funciona para archivos .avi.

Puedo obtener reproducción de video en bucle usando una declaración if para cuando el conteo de cuadros alcance cap.get(cv2.CAP_PROP_FRAME_COUNT) y luego reiniciando el conteo de fotogramas y cap.set(cv2.CAP_PROP_POS_FRAMES, num) al mismo valor. El siguiente ejemplo sigue reproduciendo el video para mí.

import cv2

cap = cv2.VideoCapture('path/to/video') 
frame_counter = 0
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    frame_counter += 1
    #If the last frame is reached, reset the capture and the frame_counter
    if frame_counter == cap.get(cv2.CAP_PROP_FRAME_COUNT):
        frame_counter = 0 #Or whatever as long as it is the same as next line
        cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

También funciona para volver a capturar el video en lugar de restablecer el recuento de fotogramas:

if frame_counter == cap.get(cv2.CAP_PROP_FRAME_COUNT):
    frame_counter = 0
    cap = cv2.VideoCapture(video_name)

Así que al menos me funciona para usar cap.set(cv2.CAP_PROP_POS_FRAMES, num) para reproducir un video. ¿Qué sucede si restablece el cuadro cero en lugar del primero (como con el método avi)?

Aquí tienes las reseñas y valoraciones

Al final de la artículo puedes encontrar las interpretaciones de otros administradores, tú aún tienes la opción de insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *