2012-03-29 81 views
5

我目前有一個Matlab代碼,從兩個網絡攝像頭拍攝圖像,覆蓋它們並將它們顯示在一個圖形中,該圖形在時間間隔內得到更新以提供半實時。 但是,我需要做到這一點實時,沒有人有任何想法如何覆蓋兩個攝像頭流,就像你會用3D電影做什麼?疊加兩個網絡攝像頭流 - Matlab

謝謝!

+0

我有問題可視化此。你可以顯示你的輸出的示例圖像嗎? – PearsonArtPhoto 2012-03-29 15:12:27

+0

像這樣:http://programmerpayback.com/2011/04/16/live-stereoscopic-3d-in-the-mmp-player-framework/然而,不是有一個攝像頭紅色和另一個藍色,就像他們一樣將不會拆分色彩空間。 – user1300561 2012-03-30 14:38:23

+0

我看着你的鏈接@ user1300561:非常酷的想法。唉,我無法回答你的問題: - / – Richard 2012-09-18 12:28:53

回答

0

我建議在OpenCV中使用它。

1

如果你的意思Anaglyph 3D,同時具有圖片,你可以做到以下幾點:

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

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

兩個PNG的已經配備了圖像處理工具箱。

結果將是這個(你可以看看它與紅/青色眼鏡我做到了!): image

我已經嘗試過這種方法與真正圖片在兩個方面:
1同時拍攝2張照片,2張不同的照相機稍有偏移;
2.使用移動攝像頭在很短的時間拍攝的2張照片。 (突發模式)
他們都給出了卓越的結果。


然後,用2個攝像頭做到這一點,你需要:
1.初始化他們正確;
2.設置它們爲每個觸發器獲得1幀;
3.觸發它們並獲得兩個幀;
4.混合幀並顯示它們。

我沒有2個的攝像頭,所以我沒能測試,但我覺得這個代碼可以做到這一點:

相機設置:

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

然後做一個無限循環得到幀,混合並顯示結果。

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 

注意,因爲我的攝像頭是YUV我必須把它轉換爲RGB混合圖像之前。

希望這可以幫助你!