readFrame to slow, is there a faster way?
8 次查看(过去 30 天)
显示 更早的评论
Hello
I want to "cut out" objects that are placed in front of a green screen in real time, and replace the background with a video.
The object extraction itself works fine (tested with a simple image as background).
Then i tried to implement a background video with 'readFrame', but the background video runs in slow motion (see files attached), plus the live stream gets laggy too.
Is there a faster way to acquire single video frames and process them?
Thanks for any help!
function example1
% webcam
cam = videoinput('winvideo',1);
% get background image
img1 = getsnapshot(cam);
% video objekt
vidobj1 = VideoReader('Testvideo.mp4');
% background
background = readFrame(vidobj1,'native');
background = imresize(background, [size(img1, 1), size(img1, 2)]);
img = imshow(background,'InitialMagnification','fit');
% Set a custom preview function
setappdata(img,'UpdatePreviewWindowFcn',@mypreview_fcn);
% Call preview with the custom image
preview(cam,img);
function mypreview_fcn(obj,event,himage)
% receive the image in event.Data
foreground = event.Data;
background = readFrame(vidobj1,'native');
[overlayed,a] = greenScreen(foreground, background);
% Display
set(img, 'CData', overlayed);
end
end
0 个评论
采纳的回答
Walter Roberson
2017-11-18
The Computer Vision reader should be faster; see https://www.mathworks.com/help/vision/ref/vision.videofilereader-system-object.html
5 个评论
Walter Roberson
2017-11-20
There is im2double instead of im2single() . Without testing it is difficult to say which would lead to faster code.
更多回答(1 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!