2012-03-29 12 views
5

Attualmente ho un codice in Matlab che prende le immagini da due webcam, le sovrappone e le visualizza in una figura che viene aggiornata a intervalli di tempo per fornire semi-realtime. Tuttavia, ho bisogno di fare questo in tempo reale, qualcuno ha qualche idea di come sovrapporre due flussi di webcam come si farebbe con un film in 3D?Sovrapponi due flussi di web cam - Matlab

Grazie!

+0

Ho problemi a visualizzare questo. Puoi mostrare un'immagine campione del tuo output? – PearsonArtPhoto

+0

In questo modo: http://programmerpayback.com/2011/04/16/live-stereoscopic-3d-in-the-mmp-player-framework/ Tuttavia, invece di avere una telecamera rossa e l'altra blu, proprio come loro sarebbe senza dividere lo spazio colore. – user1300561

+0

Ho visto il tuo link @ user1300561: un'idea molto interessante. Ahimè, non posso aiutare a rispondere alla tua domanda: - / – Richard

risposta

0

Suggerirei di farlo in OpenCV.

1

Se vuoi dire Anaglyph 3D, avendo entrambe le immagini si possono fare le seguenti operazioni:

left = imread('vipstereo_hallwayLeft.png'); 
right = imread('vipstereo_hallwayRight.png'); 

imshow(cat(3, left(:,:,1), right(:,:,2:3))); 

sia di già venuto con la casella degli strumenti di elaborazione delle immagini png.

Il risultato sarà questo (. E si può guardare ad essa con Red/vetri ciano ho fatto io!): image

Ho già provato questo metodo con reali immagini in 2 modi:
1 2 foto scattate contemporaneamente con 2 diverse telecamere un po 'spostate;
2. 2 immagini scattate in brevissimo tempo con una telecamera in movimento. (modalità burst)
Ed entrambi hanno dato risultati eccellenti.


Poi, di farlo con 2 webcam, è necessario: 1.
loro init correttamente;
2. impostarli per ottenere 1 fotogramma per trigger;
3. attivarli e ottenere entrambi i frame;
4. mescolare i frame e mostrarli.

Non ho 2 webcam in modo da non ero in grado di provarlo, ma penso che questo codice può farlo: l'installazione

Telecamere:

% Get a handle to each cam 
Lvid = videoinput('winvideo', 1, 'YUY2_1280x1024'); 
Rvid = videoinput('winvideo', 2, 'YUY2_1280x1024'); 

% Set them to get one frame/trigger 
Lvid.FramesPerTrigger = 1; 
Rvid.FramesPerTrigger = 1; 

Poi fare un ciclo infinito di ottenere fotogrammi , mescolali e mostra il risultato.

while(1) 
    % Trigers both video sources 
    start(Lvid); 
    start(Rvid); 

    % Get the frames 
    left = getdata(Lvid); 
    right = getdata(Rvid); 

    % Convert them to RGB 
    left = ycbcr2rgb(left); 
    right = ycbcr2rgb(right); 
    % mix them (R from right + GB from left) 
    frame = cat(3, left(:,:,1), right(:,:,2:3)); 
    % show 
    imshow(frame); 
    pause(0.0001) % to refresh imshow 
end 

Nota che poiché la mia webcam è YUV devo convertirlo in RGB prima di missare le immagini.

Spero che questo ti aiuti!