намеренное сочетание версий opencv - PullRequest
1 голос
/ 02 августа 2011

У меня есть проект, который использует OpenCV1.1 и теперь перешел на OpenCV2.2. В этом проекте используется обнаружение лиц opencv, и в версии 2.2 это происходит примерно вдвое медленнее, чем в 1.1. Это замедление влияет на производительность этого проекта в реальном времени.

Мне было интересно, смогу ли я использовать facedetector в 1.1, используя 2.2 для других, не критичных ко времени частей проекта. Поэтому я попробовал пару вещей с ограниченным успехом. Сначала я попытался использовать обе версии в одном и том же проекте, но у меня были различные проблемы, которые я не мог решить. Затем я попытался создать dll с помощью только детектора лица в 1.1 и использовать эту dll в проекте, который использовал 2.2. Это работает, но, как ни странно, несмотря на то, что я могу измерить увеличение скорости для распознавания лиц (которое является opencv1.1, обернутым в dll), остальные части проекта, кажется, замедлились. Я не знаю, что происходит, может быть, какой-то внутренний конфликт между версиями opencv, взаимоблокировка или что-то в этом роде.

Кто-нибудь пробовал это раньше? Любая помощь будет оценена

Martin.

1 Ответ

0 голосов
/ 02 августа 2011

Может работать. Не связывайте свой проект с библиотеками v1.1. Также, вероятно, лучше переименовать библиотеки DLL OpenCV 1.1 во что-то другое и предотвратить возможные конфликты в вашей системе с библиотеками v2.2.

Хитрость заключается в динамической загрузке DLL . Используйте LoadLibrary() для загрузки DLL v1.1 в ваше приложение и GetProcAddress() для получения адресов функций (чтобы иметь возможность вызывать их позже в вашем коде).

Примечание: вам нужно вызывать GetProcAddress() один раз для каждой функции OpenCV v1.1, которую вы используете в своем коде.

...