У нас есть приложение, в котором мы получаем сообщение от внешней системы, а затем делаем снимок, выполняем некоторую обработку и возвращаем что-то обратно во внешнюю систему. Проведя некоторое тестирование производительности, я обнаружил две проблемы (они несколько связаны). Я надеялся, что кто-нибудь сможет мне это объяснить.
1) _capture.QueryFrame()
буферизует кадры?
Мы видим, что если между запросом к двум кадрам с веб-камеры существует разрыв, второй кадр часто является более старым, а не тем, когда вызывался queryFrame.
Нам удалось до некоторой степени смягчить эту проблему, отбросив некоторые кадры, т.е. позвонив _capture.QueryFrame()
2-3 раза и отбросив результаты.
2) Вторая проблема заключается в том, что, когда мы рассчитали различные части приложения, мы обнаружили, что очистка буфера (вызов QueryFrame()
2-3 раза и не использование результатов) занимает около 65 мс, а затем эта строка: Image<Bgr, Byte> source = _capture.QueryFrame()
занимает около 80 мс. Эти две части занимают большую часть времени обработки, наша фактическая обработка занимает всего около 20-30 мс.
Есть ли более быстрый способ (а) очистить буфер (б) для захвата кадра?
Если у вас есть опыт работы с OpenCV и вы знаете что-то связанное, пожалуйста, дайте мне знать.