Create a video from a 4D array
23 views (last 30 days)
Show older comments
Hello, I have a problem in this code.
function [] = writeBufferToFinalVideo(buffer)
video = VideoWriter('example','MPEG-4');
video.FrameRate = 25;
open(video)
for i = 1:size(buffer,4)
img = buffer(i);
img(img>1) = 1;
img(img<0) = 0;
writeVideo(video,img);
end
close(video);
end
My buffer is a 4-dimensional array that has frames inside. It is composed of: (height, width, numChannels, framesPerSymbol). The latter is the number of frames that are in a symbol, that is, the size of my buffer.
In my opinion, I think the code is correct, but I always get an empty video without the frames in my buffer.
2 Comments
Accepted Answer
Ameer Hamza
on 17 Apr 2020
If buffer is a 4D-array, then you will need to index it like this
img = buffer(:,:,:,i);
9 Comments
Ameer Hamza
on 18 Apr 2020
I am glad to be of help.
Reason: if the datatype of the matrix is double, MATLAB considers the RGB color values between 0 and 1. Whereas, for your matrix, the values were given in an 8-bit format from 0 to 255. MATLAB takes all value over one as white (that is why you saw white video frames) Dividing by 255, normalizes the value between 0 and 1. I guess, the following will also work for your original code
writeBufferToFinalVideo(uint8(encodedBuffer));
More Answers (1)
Image Analyst
on 18 Apr 2020
Make sure buffer is uint8.
buffer = zeros(height, width, numChannels, framesPerSymbol, 'uint8')
0 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!