叠加两个网络摄像头流-Matlab

5

我目前有一段Matlab代码,可以从两个网络摄像头中获取图像,叠加它们并在一个图形中显示,该图形会按时间间隔更新以提供半实时的效果。然而,现在我需要实时地完成这个过程,请问有没有人知道如何像3D电影那样叠加两个网络摄像头的流?

谢谢!


我很难想象这个。你能展示一张输出的样例图片吗? - PearsonArtPhoto
请将以下与编程有关的内容从英语翻译成中文。仅返回已翻译的文本:像这样:http://programmerpayback.com/2011/04/16/live-stereoscopic-3d-in-the-mmp-player-framework/ 但是,不要让一个相机变成红色,另一个变成蓝色,就像没有分割颜色空间一样。 - user1300561
我看了你的链接@user1300561:非常酷的想法。唉,我无法帮助回答你的问题 :-/ - Richard
2个回答

1

如果您指的是立体眼镜 3D,拥有两张图像,您可以执行以下操作:

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

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

这两个png文件已经包含在图像处理工具箱中。

结果将是这样的(您可以使用红/青眼镜观看。我试过了!): image

我已经用真实的照片尝试了两种方法:
1. 用两个不同的相机同时拍摄的两张略有偏移的照片;
2. 用移动相机在很短的时间内拍摄的两张照片。(连拍模式)
它们都给出了极好的结果。


然后,如果要使用两个网络摄像头进行操作,您需要执行以下步骤:
1. 正确初始化它们;
2. 将它们设置为每次触发获取1帧;
3. 触发它们并获取两个帧;
4. 混合帧并显示。

我没有两个网络摄像头,所以无法测试它,但我认为这段代码可以实现:

摄像头设置:

% 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格式。
希望这能帮到你!

0
我建议使用OpenCV来完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接