How To Turn A Video Into Numpy Array?
Solution 1:
The script below does what you want. You may separate part of it into the function.
Code below doesn't check for errors, in particular, production code will check that every frame*
variable is greater than zero.
import cv2
import numpy as np
cap = cv2.VideoCapture('test.mp4')
frameCount = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
frameWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frameHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
buf = np.empty((frameCount, frameHeight, frameWidth, 3), np.dtype('uint8'))
fc = 0
ret = True
while (fc < frameCount and ret):
ret, buf[fc] = cap.read()
fc += 1cap.release()
cv2.namedWindow('frame 10')
cv2.imshow('frame 10', buf[9])
cv2.waitKey(0)
Solution 2:
skvideo is a python package can be used to read video and stores into the multi-dimensional array.
import skvideo.io
videodata = skvideo.io.vread("video_file_name")
print(videodata.shape)
For more details: http://www.scikit-video.org/stable/index.html and http://mllearners.blogspot.in/2018/01/scikit-video-skvideo-tutorial-for.html
Solution 3:
When we look to the video from image processing perspective, we can assume that it is a sequence of images.
From this point, you can loop over the frames of your video and convert them into a numpy
array.
Here is an example with Pillow and OpenCV libraries, where I'm converting the screenshots from my webcam into numpy
arrays:
import cv2
import numpy as np
from PIL import Image, ImageOps
defscreenshot():
global cam
cv2.imwrite('screenshot.png', cam.read()[1])
if __name__ == '__main__':
np.set_printoptions(suppress=True)
cam = cv2.VideoCapture(0) # You can replace it with your video pathwhileTrue:
ret, img = cam.read()
cv2.imshow('My Camera', img)
ch = cv2.waitKey(5)
if ch == 27:
break
screenshot()
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
image = Image.open('screenshot.png')
size = (224, 224) # Put your suitable size
image = ImageOps.fit(image, size, Image.ANTIALIAS)
image_array = np.asarray(image) # Here, an image -> numpy arrayprint(image_array)
cv2.destroyAllWindows()
Post a Comment for "How To Turn A Video Into Numpy Array?"