detecting red object, show centroid and put bounding box around it from the webcam video
    7 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
I want to make this code to detect red objects, show centroid and bounding box from the inbuilt webcam video of my mac device. 
%% Initialization
redThresh = 0.25; % Threshold for red detection
vidDevice = imaq.VideoDevice('macvideo', 1, 'YCbCr422_960x540', ... % 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', 800, ...
    'MaximumBlobArea', 3000, ...
    'MaximumCount', 10);
hshapeinsRedBox = vision.ShapeInserter('BorderColor', 'Custom', ... % Set Red box handling
    'CustomBorderColor', [1 0 0], ...
    'Fill', true, ...
    'FillColor', 'Custom', ...
    'CustomFillColor', [1 0 0], ...
    'Opacity', 0.4);
htextins = vision.TextInserter('Text', 'Number of Red Object: %2d', ... % Set text for number of blobs
    'Location',  [7 2], ...
    'Color', [1 0 0], ... // red color
    'FontSize', 12);
htextinsCent = vision.TextInserter('Text', '+      X:%4d, Y:%4d', ... % set text for centroid
    'LocationSource', 'Input port', ...
    'Color', [1 1 0], ... // yellow color
    'FontSize', 14);
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 < 20)
    rgbFrame = step(vidDevice); % Acquire single frame
    rgbFrame = flipdim(rgbFrame,2); % obtain the mirror image for displaying
    diffFrame = imsubtract(rgbFrame(:,:,1), rgb2gray(rgbFrame)); % Get red component of the image
    diffFrame = medfilt2(diffFrame, [3 3]); % Filter out the noise by using median filter
    binFrame = im2bw(diffFrame, redThresh); % Convert the image into binary image with the red objects as white
    [centroid, bbox] = step(hblob, binFrame); % Get the centroids and bounding boxes of the blobs
    centroid = uint16(centroid); % Convert the centroids into Integer for further steps 
    rgbFrame(1:20,1:165,:) = 0; % put a black region on the output stream
    vidIn = step(hshapeinsRedBox, rgbFrame, bbox); % Instert the red box
    for object = 1:1:length(bbox(:,1)) % Write the corresponding centroids
        centX = centroid(object,1); centY = centroid(object,2);
        vidIn = step(htextinsCent, vidIn, [centX centY], [centX-6 centY-9]); 
    end
    vidIn = step(htextins, vidIn, uint8(length(bbox(:,1)))); % Count the number of blobs
    step(hVideoIn, vidIn); % Output video stream
    nFrame = nFrame+1;
end
%% Clearing Memory
release(hVideoIn); % Release all memory and buffer used
release(vidDevice);
% clear all;
clc;
but it's giving error saying
Unable to resolve the name 'vision.TextInserter'.
Error in webcam (line 19)
htextins = vision.TextInserter('Text', 'Number of Red Object: %2d', ... % Set text for number of blobs
 Please help me to fix this issue, thanks.
0 commentaires
Réponses (1)
  Image Analyst
      
      
 le 4 Oct 2022
        I do pretty much the same thing in my attached demo where I track a green Sharpie marker as it moves around.  Adapt as needed.
2 commentaires
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

