2012-03-29 22 views
5

Mam obecnie kod w Matlabie, który pobiera obrazy z dwóch kamer, nakłada je na siebie i wyświetla je w postaci, która jest aktualizowana w odstępach czasu, aby dać pół-w czasie rzeczywistym. Muszę jednak zrobić to w czasie rzeczywistym, czy ktoś ma pojęcie, w jaki sposób nakładać dwa strumienie z kamer internetowych, tak jak w przypadku filmu 3D?Nakładanie dwóch strumieni kamer internetowych - Matlab

Dzięki!

+0

Mam problemy z wizualizacją tego. Czy możesz pokazać przykładowy obraz swoich wyników? – PearsonArtPhoto

+0

Na przykład: http://programmerpayback.com/2011/04/16/live-stereoscopic-3d-in-the-mmp-player-framework/ Jednak zamiast jednej kamery na czerwono, a drugiej na niebiesko, tak samo jak one byłby bez dzielenia przestrzeni kolorów. – user1300561

+0

Spojrzałem na twój link @ user1300561: bardzo fajny pomysł. Niestety, nie mogę pomóc odpowiedzieć na twoje pytanie: - / – Richard

Odpowiedz

0

Proponuję zrobić to w OpenCV.

1

Jeśli masz na myśli Anaglyph 3D, posiadające zarówno obrazy można wykonać następujące czynności:

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

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

zarówno png już pochodzić z przybornika przetwarzania obrazu.

Rezultatem będzie to (. I można spojrzeć na nią z czerwony/okulary Cyan zrobiłem!): image

Już próbowałem tej metody z rzeczywistych zdjęć na 2 sposoby:
1 2 zdjęcia zrobione w tym samym czasie z 2 różnymi kamerami trochę przesiedlonymi;
2. 2 zdjęcia wykonane w bardzo krótkim czasie z ruchomą kamerą. (tryb zdjęć seryjnych)
I oboje osiągnęli doskonałe wyniki.


Następnie, aby zrobić z 2 kamer, należy: 1. init,
je prawidłowo;
2. ustawić je tak, aby uzyskać 1 ramkę na wyzwalacz;
3. Wyzwolić je i uzyskać obie ramki;
4. Wymieszaj klatki i pokaż je.

nie mam 2 kamer, więc nie był w stanie go przetestować, ale myślę, że ten kod może to zrobić:

Kamery Setup:

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

następnie wykonać nieskończoną pętlę, aby uzyskać ramki , wymieszaj je i pokaż wynik.

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 

Należy pamiętać, że ponieważ moja kamera internetowa to YUV, muszę ją przekonwertować na RGB przed miksowaniem obrazów.

Mam nadzieję, że to pomoże!

Powiązane problemy