Распараллелить обработку OpenCV с Qt - PullRequest
2 голосов
/ 26 мая 2011

Я работаю с Qt и OpenCV. Я использую виджеты QtOpenGL и отображаю фреймы opencv в качестве текстур на glPlane, который работает очень быстро и прекрасно работает.

Теперь мне интересно, смогу ли я улучшить производительность еще больше, используя QThreads. В QThread реализованы функции отображения и сокращения. Следовательно, должна быть возможность разделить кадры opencv и позволить нескольким потокам обрабатывать кадры.

В качестве примера: если мой кадр имеет размер 640x480, и у меня есть 4 доступных потока, я бы разделил кадр на кадры размером 640x120 и передал по одному в каждый поток.

Потоки не имеют общих данных, потому что каждый поток получает свой собственный кадр, и в конце мне просто нужно добавить 4 кадра или скопировать их в новый кадр.

Мой вопрос: вы думаете, это сработает, и это даст мне толчок в обработке или в другом месте есть узкое место?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Прежде всего, убедитесь, что вы не создаете новые потоки для каждого фрейма - создание потоков стоит дорого.Облегченным решением может быть использование QtConcurrent :: run () для создания N QFutures.Используйте QFuture :: waitForFinished на каждом из фьючерсов и соберите результаты.Однако я не уверен, что QFutures - правильное решение для обработки в реальном времени.Альтернативный подход заключается в прямом использовании QThreadPool .Опять же, убедитесь, что вы не создаете пул каждый кадр.

1 голос
/ 26 мая 2011

Прежде всего, мой инстинкт должен сказать: «Если это действительно быстро и отлично работает, не меняйте это!»

Если вы просто хотите поиграть с потоками, я рекомендую вам взглянуть на QtConcurrent . Я ничего не знаю о различиях в производительности между реализацией с QThread и QtConcurrent , но я предпочитаю использовать QtConcurrent::run вместо использования потоков (у меня нет критичного по производительности кода рендеринга ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...