Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

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

Giorgos Papakonstantinou

2 Answers

Answer by Youssef KHMOU on 29 Sep 2013

TRY :

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

2 Comments

Giorgos Papakonstantinou on 29 Sep 2013

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

Youssef  KHMOU
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

Giorgos Papakonstantinou on 30 Sep 2013

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

Giorgos Papakonstantinou on 1 Oct 2013

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.

Image Analyst

Contact us