1
votes

i am looking forward to get a support to solve my issue regarding transferring matlab code to a simulink matlab function and i need a help as soon as possible.

the matlab code is :

%a = imaqhwinfo;
%[camera_name, camera_id, format] = getCameraInfo(a);


% Capture the video frames using the videoinput function
% You have to replace the resolution & your installed adaptor name.
vid = videoinput('winvideo',1);

% Set the properties of the video object
set(vid, 'FramesPerTrigger', Inf);
set(vid, 'ReturnedColorspace', 'rgb')
vid.FrameGrabInterval = 5;

%start the video aquisition here
start(vid)

% Set a loop that stop after 100 frames of aquisition
while(vid.FramesAcquired<=100)

    % Get the snapshot of the current frame
    data = getsnapshot(vid);

    % Now to track red objects in real time
    % we have to subtract the red component 
    % from the grayscale image to extract the red components in the image.
    diff_im = imsubtract(data(:,:,1), rgb2gray(data));
    %Use a median filter to filter out noise
    diff_im = medfilt2(diff_im, [3 3]);
    % Convert the resulting grayscale image into a binary image.
    diff_im = im2bw(diff_im,0.18);

    % Remove all those pixels less than 300px
    diff_im = bwareaopen(diff_im,300);

    % Label all the connected components in the image.
    bw = bwlabel(diff_im, 8);

    % Here we do the image blob analysis.
    % We get a set of properties for each labeled region.
    stats = regionprops(bw, 'BoundingBox', 'Centroid');

    % Display the image
    imshow(data)

    hold on

    %This is a loop to bound the red objects in a rectangular box.
    for object = 1:length(stats)
        bb = stats(object).BoundingBox;
        bc = stats(object).Centroid;
        rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
        plot(bc(1),bc(2), '-m+')
        a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), '    Y: ', num2str(round(bc(2)))));
        set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow');
    end

    hold off
end
% Both the loops end here.

% Stop the video aquisition.
stop(vid);

% Flush all the image data stored in the memory buffer.
flushdata(vid);

% Clear all variables
clear all
sprintf('%s','That was all about Image tracking, Guess that was pretty easy :) ')

when i transfer it to simulink i got the below error:

The 'videoinput' class does not support code generation.

Function 'videoinput' (#24.234.244), line 8, column 7: "videoinput" Launch diagnostic report.

waiting for immediate respond for you...

regards

1
The error is quite obvious. The videoinput class does not support code generation. This means that you can't use videoinput in Simulink when you want to try and create the Simulink block version. My suggestion would be to perhaps pre-record the video from your webcam, then use the VideoReader class to read in the frames first. I believe VideoReader supports code generation. Good luck!rayryeng

1 Answers

1
votes

As already mentioned in the comments, you can't use the videoinput function in Simulink because it does not support code generation. Instead, use the From Video Device block. You should be able to put the actual image processing algorithm into a MATLAB Function block, with a few minor tweaks.