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

Illustration
Katherine - 2021-03-10T11:54:04+00:00
Question: Can System Objects be used with webcam video acquisition for live video

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 answered . 2025-11-20

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');


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!