MATLAB Answers

Overlay an image in preview video

Asked by Giorgos Papakonstantinou on 29 Sep 2013
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');
preview(vid)

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.

  0 Comments

2 Answers

Answer by Youssef Khmou
on 29 Sep 2013

TRY :

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

  2 Comments

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

Youssef Khmou
on 29 Sep 2013

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....


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.

  4 Comments

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');
start(vid);
prepstream = imshow(zeros([res nBands] ));
while islogging(vid)
      stream = getdata(vid,1);
      flushdata(vid);
      set(prepstream, 'Cdata', stream);
      drawnow;
      hold on;
      h_g = plot(90+[0 460 460 0 0],10+[0 0 460 460 0],'g');
  end

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.

Image Analyst
on 2 Oct 2013

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.


Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply today