преднамеренное смешение версий opencv

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

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

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

Мартин.


person martinako    schedule 02.08.2011    source источник


Ответы (1)


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

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

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

person karlphillip    schedule 02.08.2011