【问题标题】:Superimpose two web cam streams - Matlab叠加两个网络摄像头流 - Matlab
【发布时间】:2012-03-29 10:59:24
【问题描述】:

我目前在 Matlab 中有一个代码,它从两个网络摄像头获取图像,将它们叠加并显示在一个图形中,该图形会按时间间隔更新以提供半实时。 但是,我需要做到这一点,有人知道如何像处理 3D 电影一样叠加两个网络摄像头流吗?

谢谢!

【问题讨论】:

  • 我无法将其可视化。你能展示你的输出的示例图像吗?
  • 像这样:programmerpayback.com/2011/04/16/… 但是,不是让一个相机红色和另一个蓝色,就像不分割色彩空间一样。
  • 我查看了您的链接@user1300561:非常酷的想法。唉,我忍不住回答你的问题:-/

标签: matlab 3d overlay real-time webcam


【解决方案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。

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    我建议在 OpenCV 中进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多