Can System Objects be used with webcam video acquisition for live video

K
Katherine · Mar 10, 2021 · 1.9K views
Question
Can System Objects be used with webcam video acquisition for live video in Video and  Image Processing Blockset 3.0 (R2010a)? I would like to have a live video that is captured by a webcam as an input to my system object: reader = video.MultimediaFileReader This means that whatever is captured by webcam will be instantly be read by system objects for further stream processing.
Expert Answer
Profile picture of John Michell
John Michell PhD Expert
Answered Nov 20, 2025
You can use live video capture with System Objects in the following manner:
 
1. One immediate solution in MATLAB 7.10 (R2010a) is to use Windows Media Encoder to turn the video into an MMS stream, and then use the video.MultimediaFileReader System object to read the video stream.
 
Note that this solution is not optimal because:
  • There is a large amount of buffering when using this mechanism.
  • The video stream is compressed.
If you do go down this route, install Windows Media Player version 11 before doing so. There is a related solution on that topic listed at the bottom of the page.
 
2. The better solution is to use a System objects from Image Acquisition Toolbox. To connect to a web cam, the Image Acquisition Toolbox can be used with System objects quite easily. For this, look at the attached MATLAB script which shows how these frames can be acquired. Here, there is no need to turn video into an MMS stream as previously mentioned in Step 1.
 
The Image Acquisition Toolbox offers several different modes of acquisition and the one this MATLAB script shows is where we only acquire frames when we have finished processing the previous one
% Demo code below:
% -----------
%% Initialization
hCamera = videoinput('winvideo',1);
triggerconfig(hCamera, 'manual');
%
hSingle = video.ImageDataTypeConverter;
hCSC = video.ColorSpaceConverter('Conversion', 'YCbCr to RGB');
hOF = video.OpticalFlow('OutputValue', 'Horizontal and vertical components in complex form', ...
    'ReferenceFrameDelay', 1);
hMean1 = video.Mean;
hMean2 = video.Mean('RunningMean', true);
hMedianFilt = video.MedianFilter2D;
hClose = video.MorphologicalClose('Neighborhood', strel('line',5,45));
hErode = video.MorphologicalErode('Neighborhood', strel('square',2));
hVideo1 = video.VideoPlayer('WindowCaption', 'Original Video');
hVideo1.WindowPosition = [50 250 350 300];
hVideo2 = video.VideoPlayer('WindowCaption', 'Results');
hVideo2.WindowPosition = [475 250 350 300];
%%
i=0;
start(hCamera)
while i < 150          % A hack to limit the demo to 150 frames
    image = getsnapshot(hCamera);
    I = step(hSingle,image);
    Irgb = step(hCSC, I);
    of = step(hOF, I(:,:,1));
    of_mag = of .* conj(of);
    vel_th = 0.50 * step(hMean2, step(hMean1, of_mag));
    filteredout = step(hMedianFilt, of_mag >= vel_th);
    th_image = step(hClose, step(hErode, filteredout));
    step(hVideo1, Irgb); % Display Original Video
    step(hVideo2, th_image); % Display Moving Objects
    i = i+ 1;
end
%%
stop(hCamera);
%%
close('all','force');
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!