2014-02-09 1 views
0

Я работаю с opencv, который я интегрировал в MATLAB. Я использую библиотеки Features2D и Nonfree opencv для запуска различных алгоритмов обнаружения и описания ключевых точек.C++ mex постоянно работает и ждет ввода MATLAB

После многих тестов я заметил, что BRISK очень хорошо справляется с моими данными. Проблема в том, что конструктор класса BRISK очень медленный по сравнению с другими алгоритмами. Эта строка:

BRISK детектор (10,3,1.0f);

- это порядок величин медленнее, чем обнаружение, описание соответствия все вместе. Теперь я делаю это так, что каждый раз, когда приходит новая пара изображений, я запускаю свой файл mex, и все объявления и конструкции классов выполняются снова, что делает его медленнее.

Есть ли способ запустить файл mex в начале моего скрипта MATLAB (до того, как цикл отправит новые изображения в файл mex), чтобы он делал все необходимые декларации и продолжал ждать в фоновом режиме для ввода из MATLAB , Это сделает мой код намного быстрее. В предоставленном API-интерфейсе Matlab от создателей BRISK кажется, что это делается таким образом, но я не мог понять, как сделать то же самое для моего собственного mex-кода.

Я попытался найти это в stackoverflow, но я действительно не знаю, что искать или что такое называется.

Благодаря

ответ

0

Что вы ищете способ сделать объекты сохраняются между MEX вызовов. См here (под редакцией):

Да, вы можете сделать C++ объект сохраняются между вызовами, и вы не должны возвращать указатель на рабочую область Matlab. Просто определите свой объект над точкой входа mexFunction. Он останется постоянным как , так как ваш файл mex останется в памяти (т. Е. Вы не очистите файл mex).