Use a USB camera to detect colors

23 views (last 30 days)
almog haviv
almog haviv on 14 Jan 2022
Answered: Image Analyst on 15 Feb 2022
Hello everyone! I have code that only recognizes the color white, and it works through the computer's camera. How can I change it to work with a USB camera?
% Program Name : white Object Detection and Tracking %
% Author : Arindam Bose %
% Version : 1.05 %
% Description : How to detect and track white objects in Live Video %
%% Initialization
thresh = 0.75; % Threshold for white detection
vidDevice = imaq.VideoDevice('winvideo', 1, 'YUY2_640x480', ... % Acquire input video stream
'ROI', [1 1 640 480], ...
'ReturnedColorSpace', 'rgb');
vidInfo = imaqhwinfo(vidDevice); % Acquire input video property
hblob = vision.BlobAnalysis('AreaOutputPort', false, ... % Set blob analysis handling
'CentroidOutputPort', true, ...
'BoundingBoxOutputPort', true', ...
'MinimumBlobArea', 400, ...
'MaximumCount', 50);
hshapeinsWhiteBox = vision.ShapeInserter('BorderColor', 'Custom', ...
'CustomBorderColor', [1 0 0]); % Set white box handling
hVideoIn = vision.VideoPlayer('Name', 'Final Video', ... % Output video player
'Position', [100 100 vidInfo.MaxWidth+20 vidInfo.MaxHeight+30]);
nFrame = 0; % Frame number initialization
%% Processing Loop
while(nFrame < 300)
rgbFrame = step(vidDevice); % Acquire single frame
rgbFrame = flipdim(rgbFrame,2); % obtain the mirror image for displaying
bwredFrame = im2bw(rgbFrame(:,:,1), thresh); % obtain the white component from red layer
bwgreenFrame = im2bw(rgbFrame(:,:,2), thresh); % obtain the white component from green layer
bwblueFrame = im2bw(rgbFrame(:,:,3), thresh); % obtain the white component from blue layer
binFrame = bwredFrame & bwgreenFrame & bwblueFrame; % get the common region
binFrame = medfilt2(binFrame, [3 3]); % Filter out the noise by using median filter
[centroid, bbox] = step(hblob, binFrame); % Get the centroids and bounding boxes of the blobs
rgbFrame(1:15,1:215,:) = 0; % put a black region on the output stream
vidIn = step(hshapeinsWhiteBox, rgbFrame, bbox); % Instert the white box
for object = 1:1:length(bbox(:,1)) % Write the corresponding centroids
step(hVideoIn, vidIn); % Output video stream
nFrame = nFrame+1;

Answers (2)

Pravarthana P
Pravarthana P on 15 Feb 2022
Hi Almog haviv, it can be understood that you are trying to detect white color through an USB web-camera.
Toolbox required : Image Acquisition toolbox
After connecting the USB web camera, you can find the following properties using the functions:
webcamlistlist of camera connected to the PC
imaqhwinfo – Information about the adapters
Once, after identifying the respective web camera use webcam([%corresponding web camera number]) to know about the web camera feature.
Replace “vidDevice = imaq.VideoDevice('winvideo', 1, 'YUY2_640x480')” with
vidDevice=videoinput(adapter name,device ID,format);
By this you can use the created object vidDevice to detect any live streaming video input through USB webcamera.
Links you may find helpful:

Image Analyst
Image Analyst on 15 Feb 2022
You need the Image Acquisition Toolbox, or you can probably get by with the simpler webcam utility. See the links @Pravarthana P gave.
To detect colors other than white, see my attached demo (that reads from a video file, not a live camera) that tracks a green Sharpie marker.


Find more on Image Acquisition Toolbox Supported Hardware in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!