2012-03-29 27 views
5

Actualmente tengo un código en Matlab que toma imágenes de dos cámaras web, las superpone y las muestra en una figura que se actualiza en intervalos de tiempo para dar semi-tiempo real. Sin embargo, tengo que hacer esto en tiempo real, ¿alguien tiene alguna idea de cómo superponer dos secuencias de cámara web como lo haría con una película en 3D?Superpone dos flujos de cámara web: Matlab

Gracias!

+0

Tengo problemas para visualizar esto. ¿Puedes mostrar una imagen de muestra de tu resultado? – PearsonArtPhoto

+0

Me gusta esto: http://programmerpayback.com/2011/04/16/live-stereoscopic-3d-in-the-mmp-player-framework/ Sin embargo, en lugar de tener una cámara roja y otra azul, igual que sería sin dividir el espacio de color. – user1300561

+0

Miré tu enlace @ user1300561: idea genial. Por desgracia, no puedo evitar responder a tu pregunta: - / – Richard

Respuesta

0

Sugiero hacerlo en OpenCV.

1

Si se refiere a Anaglyph 3D, con las dos imágenes que puede hacer lo siguiente:

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

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

de que ya vienen con la caja de herramientas de procesamiento de imágenes tanto png.

El resultado será este (. Y se puede mirarlo con gafas rojo/cian lo hice!): image

ya he intentado este método con reales fotos de 2 maneras:
1 2 fotos tomadas al mismo tiempo con 2 cámaras diferentes un poco desplazadas;
2. 2 fotos tomadas en muy poco tiempo con una cámara en movimiento. (modo de ráfaga)
Y ambos dieron excelentes resultados.


A continuación, hacerlo con 2 cámaras web, es necesario: 1.
ellos init adecuadamente;
2. configúrelos para obtener 1 fotograma por disparador;
3. activarlos y obtener ambos marcos;
4. mezclar cuadros y mostrarlos.

no tengo 2 webcams así que no era capaz de probarlo, pero creo que este código puede hacerlo:

Cámaras configuración:

% 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; 

Después, realice un bucle infinito para conseguir marcos , mezclarlos y mostrar el resultado.

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 

Tenga en cuenta que desde mi webcam es YUV tengo que convertirla a RGB antes de mezclar las imágenes.

Espero que esto te ayude!