Loren on the Art of MATLAB

Turn ideas into MATLAB

Note

Loren on the Art of MATLAB has been archived and will not be updated.

Webcam Support – New in R2014a

Today I’d like to introduce a fairly frequent guest blogger Sarah Wait Zaranek who works for the MATLAB Marketing team here at The MathWorks. She and I will be writing about the new capabilities for the webcam in R2014a.

Contents

Webcam is Available

In R2014a, you can bring live images from webcams into MATLAB.

Installing the Support Package

Webcam support is available through a hardware support package. Hardware support pacakges have existed in previous release for Simulink but now they are available for MATLAB, too.

You can find the support package installer in the resources section of the home tab of the Toolstrip. From there, choose install from Internet, select USB Webcams

And install your webcam support package.

Listing Webcams and Previewing

Now, that the webcam support is installed – let’s get started using our webcam.

You can see a list of available webcams

webcamlist
ans = 
    'Microsoft LifeCam Cinema'
    'Integrated Camera'

You can see that Loren has two different webcams. We use the function webcam, to select which camera to use, by using either the camera name or the index in the webcamlist corresponding to the camera.

mycam = webcam('Microsoft LifeCam Cinema')
mycam = 
  webcam with properties:

                     Name: 'Microsoft LifeCam Cinema'
               Resolution: '640x480'
     AvailableResolutions: {1x12 cell}
               Brightness: 133
    BacklightCompensation: 0
         WhiteBalanceMode: 'auto'
               Saturation: 83
                     Zoom: 0
                      Pan: 0
                FocusMode: 'auto'
                Sharpness: 25
             WhiteBalance: 4500
             ExposureMode: 'auto'
                     Tilt: 0
                    Focus: 0
                 Contrast: 5
                 Exposure: -6

If you only have a single webcam available, that webcam will be used by default. You can use preview to check on the webcam view.

preview(mycam)
pause(10)
snapnow
closePreview(mycam)

You can experiment and set any properties that you may want to change. For example, you might want to change the resolution or the brightness.

mycam.Brightness =  200;

Taking a Single Image

You can acquire a single live image from your webcam.

img = snapshot(mycam);
imagesc(img)

% You can see me and Loren hanging out in her office!

Taking Images Within a Loop

You can set up a loop to acquire many images – and can process each frame within the loop. For example, we can reduce the number of distinct colors used in the image.

Grab and process frames

frames = 50;

for i = 1:frames
    % Acquire frame for processing
    img = snapshot(mycam);

    % Quantize image by thresholding
    idx = img > 60 & img < 170 ;
    img(idx)= 255;
    img(~idx)= 0;

    % Display frame
    imagesc(img);
    axis image;
    axis off;
end

Taking Images Within a Loop and Saving to an AVI-file

Additionally, you can create a video file of the processed frames by using VideoWriter.

Set up video writer

mywriter = VideoWriter('mymovie.avi');
open(mywriter);

Grab and process frames

frames = 50;

for ii = 1:frames
    % Acquire frame for processing
    img = snapshot(mycam);

    % Quantize image by thresholding
    idx = img > 60 & img < 170 ;
    img(idx)= 255;
    img(~idx)= 0;

    % Display frame
    imagesc(img);
    axis image;
    axis off;

    % Write frame to video
    writeVideo(mywriter,img);
end
close(mywriter)

Taking Images Within a Loop and Creating an Animated GIF

We're going to do ALMOST the same thing we've just done, but output an animated GIF file instead.

Grab and process frames

frames = 50;
filename = 'mymovie.gif';

for i = 1:frames
    % Acquire frame for processing
    img = snapshot(mycam);

    % Quantize image by thresholding
    idx = img > 60 & img < 170 ;
    img(idx)= 255;
    img(~idx)= 0;

    % Display frame
    imagesc(img)
    axis image;
    axis off;

    [img, cm] = rgb2ind(img, 256);
    if i == 1;
        imwrite(img,cm,filename,'gif','Loopcount',inf);
    else
        imwrite(img,cm,filename,'gif','WriteMode','append');
    end
end

Here's the movie we just made

Tidy up

delete(mycam)

Additional Camera Support

Support for high-end scientific and industrial cameras and more advanced features such as triggering, data logging can be found in the Image Acquisition Toolbox.

Do You Have a Project that Uses a Webcam?

Do you have a project, for school, work, or fun, where you want to use a webcam with MATLAB? Tell us about it here.




Published with MATLAB® R2014a


  • print