MATLAB Answers


Overlay an image in preview video

Latest activity Commented on by Image Analyst
on 2 Oct 2013

I would like to overlay an image when I preview video.

By trying this :

vid = videoinput('winvideo');

I can preview the video of my installed camera. How can I have overlay on top of the live video an image?

I want the live video to be at the background and the image at the foreground.

Thank you.


Log in to comment.

2 Answers

Answer by Youssef Khmou
on 29 Sep 2013


 figure, imshow( Your foreground), hold on, preview(vid) ;


Thank you Youssef KHMOU, but the preview(vid) open in a new figure

i checked the descriptor h=preview(vid) and its hard to do the task, but you can perform it indirectly, after acquiring the data with getdata(vid) you have M-N-3-Samples, you can choose a an image and add it to the whole video....

Log in to comment.

Answer by Image Analyst
on 29 Sep 2013

I don't think you can blend a live image with a stored image but maybe there's some trick to it, like by using an alpha channel or something. Call them and ask them. I know you can put up graphics over a live image, like text, circles, boxes, lines, that sort of thing. Would that work for you or must it be two blended color images? If it must be a blended image and the alpha channel doesn't pan out then you'll have to get in a loop where you call get snapshot and average it with your stored image and then display that. I'm sure the frame rate will be lower though.


Show 1 older comment

Thank you Image Analyst! That would also work. My actually image is a set of boxes. Therefore a box will do the job.

Can you help me do that?

Thank you!!!

I have managed to insert a square when the camera is capturing. What I did is the following:

vid = videoinput('winvideo',1);
set(vid, 'framesperTrigger', 20, 'TriggerRepeat', Inf);
nBands = get(vid, 'NumberOfBands');
res=get(vid, 'Videoresolution');
prepstream = imshow(zeros([res nBands] ));
while islogging(vid)
      stream = getdata(vid,1);
      set(prepstream, 'Cdata', stream);
      hold on;
      h_g = plot(90+[0 460 460 0 0],10+[0 0 460 460 0],'g');

The problem is that it consumes a lot of resources. I can hear the fan spinning like crazy. I was wondering if there is any other alternative.

If I preview(vid) I cannot insert the square inside the streaming video. However, preview does not stress the cpu.

Thank you.

I just do this:

% Turn on the live video.
preview(vidobj, handleToImageInAxes);

then call plot() to plot some outline. It doesn't stress the CPU and cause the fan to go on and the CPU to get all hot.

Log in to comment.

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today