2013-06-14 4 views
1

Я разработал приложение C#, которое принимает входной поток streamRGB (640x480 rate: 30fps), созданный устройством Kinect. После приема каждого кадра я сохраняю его на диске как file.wmv. Проблема начинается, когда я пытаюсь манипулировать каждым кадром, прежде чем сохранять его, потому что скорость потока составляет 30 кадров в секунду, а операция манипуляции длится около 200 мс (поэтому я могу получить всего 5 кадров в секунду).Проблема с обработкой кадров в реальном времени

Я знаю, что это распространенная проблема. Какое наиболее распространенное решение используется для его решения?

ответ

1

Это распространенная проблема, которая возникает, когда вам нужно что-то делать в режиме реального времени, но на самом деле это слишком медленно, чтобы обрабатываться в режиме реального времени. Первым и главным «решением» было бы увеличить производительность операций в реальном времени, чтобы оно было достаточно быстрым, однако это часто невозможно.

Более реалистичным вариантом является установка очереди для обработки в другом потоке. Это идеальный пример для шаблона проектирования потребителя/производителя, так как вы можете создавать кадры и потреблять их для работы как можно быстрее. Чтобы выгрузить память, вы можете записать фреймы на файл и прочитать их при потреблении.

Также обратите внимание, что GDI +, код за растровыми изображениями, является однопоточным и блокирует все действия, связанные с манипулированием изображениями, с одним потоком. Это можно перенести с использованием различных процессов (по одному для каждого ядра) для оптимизации производительности машины.

+0

Спасибо @Roel – GVillani82

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