Наложение двух потоков веб-камеры - Matlab - PullRequest
5 голосов
/ 29 марта 2012

В настоящее время у меня есть код в Matlab, который берет изображения с двух веб-камер, накладывает их и отображает их на рисунке, который обновляется через промежутки времени, чтобы получить полуреальное время. Тем не менее, мне нужно сделать это в реальном времени, кто-нибудь имеет представление о том, как наложить два потока веб-камеры, как вы бы сделали с 3D-фильмом?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 января 2013

Если вы имеете в виду 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 снимка, сделанные за очень короткое время с помощью движущейся камеры.(режим серийной съемки)
И оба они дали превосходные результаты.


Затем, чтобы сделать это с двумя веб-камерами, вам необходимо:
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 перед смешиванием изображений.

Надеюсь, это поможет вам!

0 голосов
/ 15 апреля 2012

Я бы предложил сделать это в OpenCV.

...