web-dev-qa-db-fra.com

OpenCV charge la vidéo depuis l'URL

J'ai un fichier vidéo (c'est-à-dire https://www.example.com/myvideo.mp4) et besoin de le charger avec OpenCV.

Faire l'équivalent avec une image est assez banal:

imgReq = requests.get("https://www.example.com/myimage.jpg")
imageBytes = np.asarray(bytearray(data), dtype=np.uint8)
loadedImage = cv2.imdecode(image, cv2.IMREAD_COLOR)

Je voudrais faire quelque chose de similaire au suivant (où loadedVideo sera similaire à ce que OpenCV renvoie 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)

Mais cv2.videodecode n'existe pas. Des idées?


Edit: Étant donné que cela peut être une impasse avec seulement OpenCV, je suis ouvert aux solutions qui combinent d'autres bibliothèques d'imagerie avant de charger dans OpenCV ... si une telle solution existe.

8
abagshaw

Il paraît que cv2.videocode N'est pas valide OpenCV API soit en OpenCV 2.x ou OpenCV 3.x.

Voici un exemple de code dans lequel il fonctionne dans OpenCV 3 qui utilise cv2.VideoCapture classe.

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"

Vous pouvez vérifier ceci Premiers pas avec les vidéos tutoriel pour plus d'informations.

J'espère que cette aide.

8
thewaywewere

Vous devrez lire la vidéo à l'aide de VideoCapture. il n'y a pas d'autre moyen de contourner cela pour l'instant. à moins que vous ne le définissiez vous-même.

rappelez-vous qu'une vidéo est une combinaison d'images changeant à une fréquence d'images définie.

Vous pouvez donc lire chaque image dans une boucle while. lorsque vous appliquez la fonction 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()
2
kishea