2012-03-29 23 views
5

Tôi hiện có một mã trong Matlab lấy hình ảnh từ hai webcam, phủ lên chúng và hiển thị chúng trong hình được cập nhật theo khoảng thời gian để bán thời gian thực. Tuy nhiên, tôi cần phải thực hiện thời gian thực này, có ai có ý tưởng nào về cách che phủ hai luồng webcam giống như bạn sẽ làm với một bộ phim 3D không?Chồng hai luồng cam web - Matlab

Cảm ơn!

+0

Tôi đang gặp sự cố khi trực quan hóa điều này. Bạn có thể hiển thị một hình ảnh mẫu về đầu ra của mình không? – PearsonArtPhoto

+0

Giống như sau: http://programmerpayback.com/2011/04/16/live-stereoscopic-3d-in-the-mmp-player-framework/ Tuy nhiên, thay vì có một máy ảnh màu đỏ và màu xanh khác, giống như chúng sẽ không tách không gian màu. – user1300561

+0

Tôi đã xem liên kết của bạn @ user1300561: ý tưởng rất hay. Than ôi, tôi không thể trả lời câu hỏi của bạn: - / – Richard

Trả lời

0

Tôi khuyên bạn nên làm điều đó trong OpenCV.

1

Nếu bạn có ý nghĩa Anaglyph 3D, có cả hình ảnh mà bạn có thể làm như sau:

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

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

cả của đã đi kèm với hộp công cụ xử lý hình ảnh png.

Kết quả sẽ là này (. Và bạn có thể nhìn vào nó với Red/kính Cyan tôi đã làm!): image

Tôi đã thử phương pháp này với thực hình ảnh trong 2 cách sau:
1 2 hình ảnh được chụp cùng lúc với 2 máy ảnh khác nhau một chút bị dời đi;
2. 2 hình ảnh được chụp trong một thời gian rất ngắn với camera di chuyển. (chế độ chụp)
Và cả hai đều cho kết quả xuất sắc.


Sau đó, để làm điều đó với 2 webcam, bạn cần phải:
1. init chúng đúng cách;
2. đặt chúng để nhận 1 khung hình cho mỗi trình kích hoạt;
3. kích hoạt chúng và nhận cả hai khung;
4. trộn khung và hiển thị chúng.

tôi không có 2 webcam vì vậy tôi đã không thể kiểm tra nó, nhưng tôi nghĩ rằng mã này có thể làm điều đó:

Máy ảnh thiết lập:

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

Sau đó làm một vòng lặp vô hạn để có được khung , trộn chúng và hiển thị kết quả.

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 

Lưu ý rằng vì webcam của tôi là YUV tôi phải chuyển đổi thành RGB trước khi trộn hình ảnh.

Hy vọng điều này sẽ giúp bạn!

Các vấn đề liên quan