如果您的意思是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。
希望对您有所帮助!