我目前在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/