我目前在Matlab中有一个代码,可以从两个网络摄像头中获取图像,将它们叠加并显示在图中,并按时间间隔进行更新以实现半实时。
但是,我需要实时进行操作,是否有人像您使用3D电影那样对如何叠加两个网络摄像头流有任何想法?

谢谢!

最佳答案

如果您的意思是Anaglyph 3D,同时拥有两个图像,则可以执行以下操作:

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

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

两种png都已随图像处理工具箱一起提供。

结果将是这样(您可以用红色/青色眼镜看它。我做到了!):

我已经通过2种方式对实际图片尝试了此方法:
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。

希望这对您有所帮助!

关于matlab - 叠加两个网络摄像头流-Matlab,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9924026/

10-11 07:42