Вопрос

I want to insert a circle overlaid on frames in a video with MATLAB. I want to insert the circle when a specified situation occurs in some of the video frames. These particular conditions will come later, but my problem is the following: How can I overlay circle in some frames in video?

The code I have so far is the following:

xyloObj = VideoReader('shishe.mp4');

%%
nFrames = xyloObj.NumberOfFrames;
vidHeight = xyloObj.Height;
vidWidth = xyloObj.Width;
energy=zeros(xyloObj.NumberOfFrames,3);

% Preallocate the movie structure.

mov(1:nFrames) = ...
    struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),...
           'colormap',[]);

% Read one frame at a time.

for k = 1 : nFrames
    mov(k).cdata = read(xyloObj,k);
    b2=rgb2hls_fst(mov(k).cdata);
    r1=b2(:,:,1);
    r2=b2(:,:,2);
    r3=b2(:,:,3);
    energy(k,1)=sum(sum(r1 .* r1))/ numel(r1);
    energy(k,2)=sum(sum(r2 .* r2))/ numel(r2);
    energy(k,3)=sum(sum(r3 .* r3))/ numel(r3);
    %if(mycondition)
    %    (insert shape)
    %end    
end
Это было полезно?

Решение

I found my answer and do it with below code I insertshape in each frame by mov(k).cdata= insertShape( mov(k).cdata, 'circle', [320 240 200],'Color',{dcolor});

%%
clc
range=5;
for k = 1 : nFrames
    meanenergy=energy(k,3);

    if(k>range &&  k< nFrames-range)
       meanenergy=mean( energy(k-5:k+5,3));
    end
    if(meanenergy >=ThresholdRed)
%         disp('red');
        dcolor='red';
    elseif(meanenergy >= ThresholdYellow )
%          disp('yellow');
         dcolor='yellow';
    else
%          disp('green');
         dcolor='green';
    end

     mov(k).cdata= insertShape( mov(k).cdata, 'circle', [320 240 200],'Color',{dcolor});
end
disp('end');
implay(mov)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top