OpenCV carga video desde url

Tengo un archivo de video (es decir, https://www.example.com/myvideo.mp4 ) y necesito cargarlo con OpenCV.

Hacer el equivalente con una imagen es bastante trivial:

 imgReq = requests.get("http://sofes.miximages.com/python/myimage.jpg") imageBytes = np.asarray(bytearray(data), dtype=np.uint8) loadedImage = cv2.imdecode(image, cv2.IMREAD_COLOR) 

Me gustaría hacer algo similar a lo siguiente (donde loadedVideo será similar a lo que OpenCV devuelve de cv2.VideoCapture ):

 videoReq = requests.get("https://www.example.com/myimage.mp4") videoBytes = np.asarray(bytearray(data), dtype=np.uint8) loadedVideo = cv2.videodecode(image, cv2.IMREAD_COLOR) 

Pero cv2.videodecode no existe. ¿Algunas ideas?


Edit: Dado que esto puede ser un callejón sin salida con solo OpenCV, estoy abierto a soluciones que combinen otras bibliotecas de imágenes antes de cargarlas en OpenCV … si existe tal solución.

Parece que cv2.videocode no es una OpenCV API válida ni en OpenCV 2.x ni en OpenCV 3.x

A continuación se muestra un código de ejemplo que funciona en OpenCV 3 que usa la clase cv2.VideoCapture .

 import numpy as np import cv2 # Open a sample video available in sample-videos vcap = cv2.VideoCapture('https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_2mb.mp4') #if not vcap.isOpened(): # print "File Cannot be Opened" while(True): # Capture frame-by-frame ret, frame = vcap.read() #print cap.isOpened(), ret if frame is not None: # Display the resulting frame cv2.imshow('frame',frame) # Press q to close the video windows before it ends if you want if cv2.waitKey(22) & 0xFF == ord('q'): break else: print "Frame is None" break # When everything done, release the capture vcap.release() cv2.destroyAllWindows() print "Video stop" 

Puede consultar este tutorial de Cómo comenzar con los videos para obtener más información.

Espero que esto ayude.

Tendrás que leer el video usando VideoCapture. No hay otra manera de evitar eso por ahora. a menos que tú mismo lo definas.

recordar que un video es una combinación de imágenes que cambian a una velocidad de cuadro definida.

Así que puedes leer cada cuadro en un bucle while. a medida que se aplica la función imdecode.

 import numpy as np import cv2 cap = cv2.VideoCapture('https://www.example.com/myimage.mp4') while(cap.isOpened()): ret, image = cap.read() loadedImage = cv2.imdecode(image, cv2.IMREAD_COLOR) cv2.imshow('frame',loadedImage) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()