叠加两个网络摄像头流 - Matlab

时间:2012-03-29 10:59:25

标签: matlab 3d overlay real-time webcam

我目前在Matlab中有一个代码,它从两个网络摄像头中获取图像,覆盖它们并将它们显示在一个图形中,该图形按时间间隔更新以提供半实时。 但是,我需要实时制作,有没有人知道如何覆盖两个网络摄像头流,就像你用3D电影一样?

谢谢!

2 个答案:

答案 0 :(得分: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。

希望这能帮到你!

答案 1 :(得分:0)

我建议在OpenCV中进行。