我目前在 Matlab 中有一个代码,它从两个网络摄像头获取图像,叠加它们并将它们显示在一个图形中,该图形按时间间隔更新以提供半实时。 但是,我需要做到这一点,有人知道如何像处理 3D 电影那样叠加两个网络摄像头流吗?
谢谢!
最佳答案
如果你的意思是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。
希望对你有帮助!
关于matlab - 叠加两个网络摄像头流 - Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9924026/