Is there a way to overlay a graph onto a video, plotting each successive point with each frame?

32 ビュー (過去 30 日間)
Reposted since the previous post didn't get resolved!
Hi folks,
I have a script that creates a video from image files, as below:
for i = 1 : numFolders
RawImages = [vidFolders(i).folder '\' vidFolders(i).name];
videoName = [RawImages '\' vidFolders(i).name '.avi'];
addpath(RawImages);
imageFolder = [RawImages '\Images\'];
files = dir([imageFolder '*.tif']);
numImages = length(files);
if ~isfile(videoName)
writerObj = VideoWriter(videoName);
writerObj.FrameRate = 10;
open(writerObj);
for j = 1:numImages
imagePath = [imageFolder files(j).name];
image = imread(imagePath);
image = image(:,:,1:3);
frame = im2frame(image);
writeVideo(writerObj, frame);
end
close(writerObj);
end
end
Each frame of the video is a temperature increment of 1 degree. For each video created, there is a plot that describes the video, as such:
where each point along the line is a degree increment, as with each frame in the video.
My question is: can I overlay the graph onto the video, such that the plot evolves with each frame? In other words, can I append the graph to the video and have the line extend along the X axis with each frame of the video?
I have tried videofig from the File Exchange and I can't get it to work as per:
type redraw;
vid = VideoReader('rhinos.avi');
videofig(vid.NumFrames, @(frm) redraw(frm, vid));
redraw(1, vid);
function redraw(frame, vidObj)
f = vidObj.read(frame);
f2 = edge(rgb2gray(f), 'canny');
f3 = bsxfun(@plus, f, uint8(255*f2));
image(f3); axis image off
end

採用された回答

Walter Roberson
Walter Roberson 2021 年 10 月 12 日
The shortcut to start the playing is to press return while focused on the figure. But if you need to automate, then after you run videofig, then
timers = timerfind();
start(timers(end)); %should start the playing

その他の回答 (1 件)

yanqi liu
yanqi liu 2021 年 10 月 12 日
for i = 1 : numFolders
RawImages = [vidFolders(i).folder '\' vidFolders(i).name];
videoName = [RawImages '\' vidFolders(i).name '.avi'];
addpath(RawImages);
imageFolder = [RawImages '\Images\'];
files = dir([imageFolder '*.tif']);
numImages = length(files);
if ~isfile(videoName)
writerObj = VideoWriter(videoName);
writerObj.FrameRate = 10;
open(writerObj);
for j = 1:numImages
imagePath = [imageFolder files(j).name];
image = imread(imagePath);
image = image(:,:,1:3);
% add line
image = insertShape(image,'line',[1 1 size(image,2) size(image,1)],'LineWidth',2);
frame = im2frame(image);
writeVideo(writerObj, frame);
end
close(writerObj);
end
end

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by