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

标签 matlab 3d overlay real-time webcam

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

谢谢!

最佳答案

如果你的意思是Anaglyph 3D , 有了这两个图像,您可以执行以下操作:

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

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

两个 png 都带有图像处理工具箱。

结果将是这样的(你可以用红色/青色眼镜看它。我做到了!): image

我已经通过两种方式用真实图片尝试过这种方法:
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/

相关文章:

Swift MapKit 多边形叠加

iphone - 删除 iPhone 上的 Mapkit 覆盖

对象转字符串的Matlab方法

algorithm - Matlab 将 old school min find 转换为 fminsearch

matlab:循环的棘手矢量化,其中第 n 个值取决于第 n 个和第 n+k 个值

graphics - 您可以将 GIF 和/或动画 GIF 添加到单个动画 GIF 中吗?

HTML + CSS 图像上的文本淡入淡出阻止淡入淡出的发生

matlab - 如何标准化矩阵设置 0 为最小值,1 为最大值?

javascript - Three.js 从相机中提取以弧度为单位的旋转

c++ - 禁用 Qt 3d 中的所有光源