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.
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.
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()