2016-11-22 10 views
0

Im работает над проектом с opencv и C++. Версия Opencv - 3.1. Настройка HW - Nvidia gt460 и Intel i7 3820, 64 ГБ. Я пытаюсь добиться установки нескольких камер, где все камеры будут объединены в одну большую мозаику. На ранних стадиях, возможно, 4x4 позже еще больше. После этого я буду анализировать эту мозаику и отслеживать несколько объектов.Создание мозаики каналов камеры в opencv без значительных задержек

Проблема заключается в том, что когда я создаю камеру с командой захвата в Opencv, а затем сохраняю ее в матрице, анализирую ее и показываю. Существует большая проблема с FPS уже с двумя каналами камеры. Я тестировал три USB-канала, а также несколько потоков UDP или RTSP. При использовании USB задержка не является самой большой проблемой, но FPS - это что-то вроде разделения между каналами. И использование метода stream дает мне низкий FPS и высокую задержку (около 15 секунд). Я также понял, что между камерами есть другая задержка, даже если у меня есть камеры, указывающие на одно и то же.

Есть ли кто-нибудь, кто мог бы помочь мне или решить подобную проблему? Проблема Opencv в том, что он не может анализировать больше прямых каналов одновременно?

Heres мой код сращивание:

merged_frame = Mat(Size(1280, 960), CV_8UC3); 

    roi = Mat(merged_frame, Rect(0, 0, 640, 480)); 
    cameraFeed.copyTo(roi); 
    roi = Mat(merged_frame, Rect(640, 0, 640, 480)); 
    cameraFeed2.copyTo(roi); 
    roi = Mat(merged_frame, Rect(0, 480, 640, 480)); 
    cameraFeed3.copyTo(roi); 
    roi = Mat(merged_frame, Rect(640, 480, 640, 480)); 
    cameraFeed4.copyTo(roi); 
+0

Вы воссоздаете 'merged_frame' в каждом цикле? Подход в основном правильный, просто избегайте ненужных копий или создания матов. – Miki

+0

Я бы установил поток для каждой задачи захвата камеры. Когда захват сделан, отправьте сообщение в основной поток, чтобы обновить большой кадр. – Ripi2

+0

Спасибо за ваши ответы, я уже перевел создание merged_frame из цикла, и он немного улучшил производительность, и теперь я попытаюсь создать больше потоков, чтобы увидеть, будет ли он работать еще лучше. –

ответ

1

Там существует две функции hconcat и vconcat, которые не в документации.

Вы можете увидеть пример их использования (что довольно просто, если все ваши камеры снабжены кадрами с одинаковым разрешением) here.

Возможно, это потребует создания временных объектов Mat для хранения промежуточных результатов, но я считаю, что это более интуитивно понятный способ создания мозаики фреймов.

 Смежные вопросы

  • Нет связанных вопросов^_^