How Can I draw histogram of all video's frames?
3 views (last 30 days)
Roaa Alnafea on 31 Jan 2022
I am trying to run this code in parallel to read each video frame , take the direction gradient , and substracting histogram of current frame and next one, then show the result histogram
I have get this error message:(Dot indexing is not support for variable of this type)
What should I fix in the following code?
function  = parfun()
vid = VideoReader('002.mp4');
vid.CurrentTime = 0;
vidlen = vid.NumFrames;
parfor i = 1:vidlen
temp = read(vid,i);
temp2 = read(vid,i+1);
gradframe = imgradientxy(temp);
gradframe2 = imgradientxy(temp2);
tohisto = histogram(gradframe)- histogram(gradframe2);
Benjamin Thompson on 31 Jan 2022
Use readFrame to read a single video frame from a VideoReader object. But note that reading frames from a VideoReader is not parallellizable on its own, since the frames come from a sequential video file source and it is usually not possible to know exactly where in the file future frames will start. Plus with lossy compression algorithms future frames usually depend on a past frame.
You could, however, load a set of frames in a sequential manner and then perform processing on the set using parfor. You will have to choose the size of the set based on the number of cores available and memory limits.