我目前在Matlab中有一个代码,它从两个网络摄像头中获取图像,覆盖它们并将它们显示在一个图形中,该图形按时间间隔更新以提供半实时。 但是,我需要实时制作,有没有人知道如何覆盖两个网络摄像头流,就像你用3D电影一样?
谢谢!
答案 0 :(得分:1)
如果您的意思是Anaglyph 3D,请同时拥有这两张图片:
left = imread('vipstereo_hallwayLeft.png');
right = imread('vipstereo_hallwayRight.png');
imshow(cat(3, left(:,:,1), right(:,:,2:3)));
这两个png已经带有图像处理工具箱。
结果将是这个(你可以用红色/青色眼镜来看它。我做到了!):
我已经用两种方式用真实图片尝试了这种方法:
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中进行。