We can create videos with the pictures present using the OpenCv Library.
OpenCv is an open-source image processing library which contains various predefined methods for performing tasks related to Computer Vision,Machine Learning.
Inorder to create a video out of the images we are using Opencv & PIL libraries. PIL stands for Python Imaging Library which is used to resize the images to the average height so that a video can be created using OpenCv.
The below piece of code does the following
- Opens a directory which contains the images
- Iterates through all the images and calculates the mean-height and mean-width
- Resizes the images to the mean-height and mean-width
- Save the image back into the same directory
import os import cv2 from PIL import Image os.chdir("/home/ganesh/Desktop/video") total_width=0 total_height=0 for file in os.listdir('.'): im=Image.open(os.path.join("/home/ganesh/Desktop/video",file)) width,height=im.size total_width+=width total_height+=height numofimages=len(os.listdir('.')) mean_width=int(total_width/numofimages) #calculating the width for each image mean_height=int(total_height/numofimages) #calculating the height for each image for file in os.listdir('.'): if file.endswith(".jpg") or file.endswith(".jpeg") or file.endswith(".png"): im=Image.open(os.path.join("/home/ganesh/Desktop/video",file)) imResize=im.resize((mean_width,mean_height),Image.ANTIALIAS) imResize.save(file,'JPEG',quality=95)
It is used to change the current working directory to the directory specified as parameter.
It is used to list all the contents present in the given directory.
It is used to open the image in the path given as parameter.
It returns true if the file name ends with the given suffix otherwise returns false.
It returns the resized image.It takes tuple which contains the height and width to which the image must be resized and also an optional parameter which is used as resampling filter.
It is used to save the image to the required file extension and quality.
Generating a Video with the Images:
The below function generate_video() is used to make a video with all the images present in the directory.
def generate_video(): image_folder = '.' # Use the folder video_name = 'mygeneratedvideo.avi' os.chdir("/home/ganesh/Desktop/video") images = [img for img in os.listdir(image_folder) if img.endswith(".jpg") or img.endswith(".jpeg") or img.endswith("png")] fourcc = cv2.VideoWriter_fourcc(*'DIVX') # Array images should only consider # the image files ignoring others if any frame = cv2.imread(os.path.join(image_folder, images)) # setting the frame width, height width # the width, height of first image height, width, layers = frame.shape video = cv2.VideoWriter(video_name, fourcc, 1, (width, height)) # Appending the images to the video one by one for image in images: video.write(cv2.imread(os.path.join(image_folder,image))) # Deallocating memories taken for window creation cv2.destroyAllWindows() video.release() # releasing the video generated generate_video()
This function is used to read the image at specific location. It takes the absolute path of the image as parameter. It also takes an optional parameter flag which is used to read RGB or GREY Scale image.
It is used to write the frames to the video file specified. It takes various parameters like frames_per_second,frame_size and an optional parameter isColor.Here FourCC is a 4-byte code used to specify the video codec. It is platform dependent.
This function is used to write the next video frame. It takes the image as parameter and writes it to the video.
It is used to close the currently opened file.
Every video represents set of images that are shown at a certain speed called as frames.This speed is said to be Frames Per Second(fps).It decides the duration of the total video.The duration of the video can be calculated by following formula:
Duration_Of_Video = Number_Of_Frames/Frames_Per_Second
The above formula determines that the Frames_Per_Second(fps) is inversely proportion to the Duration_Of_Video i.e less fps increases the duration and more fps decrease duration.The duration of video can be calculated using Opencv as following:
import cv2 cap = cv2.VideoCapture("./video.mp4") fps = cap.get(cv2.CAP_PROP_FPS) #frames per second frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #total number of frames duration = frame_count/fps