C++ mex постоянно работает и ждет ввода MATLAB
Я работаю с opencv, который я интегрировал в MATLAB. Я использую библиотеки Features2D и Nonfree opencv для запуска различных алгоритмов обнаружения и описания ключевых точек.
После многих тестов я заметил, что BRISK работает довольно хорошо с моими данными. Проблема в том, что конструктор класса BRISK очень медленный по сравнению с другими алгоритмами. эта строка:
Детектор BRISK (10,3,1.0f);
на порядок медленнее, чем обнаружение, описание совпадает все вместе. Теперь я делаю так, чтобы каждый раз, когда приходила новая пара изображений, я запускал свой mex-файл, и все объявления и конструкции классов выполнялись снова, что замедляет работу.
Есть ли способ запустить mex-файл в начале моего сценария MATLAB (до цикла, отправляющего новые изображения в mex-файл), чтобы он делал все необходимые объявления и продолжал ждать в фоновом режиме для ввода из MATLAB. Это сделало бы мой код намного быстрее. В предоставленном API-интерфейсе Matlab от создателей BRISK кажется, что это сделано таким образом, но я не мог понять, как сделать то же самое для моего собственного мекс-кода.
Я попытался найти это в stackru, но я действительно не знаю, что искать или как это называется.
Спасибо
1 ответ
То, что вы ищете способ сделать объекты постоянными между вызовами mex. Смотрите здесь (отредактировано):
Да, вы можете сделать объект C++ постоянным между вызовами, и вам не нужно возвращать указатель на рабочую область Matlab. Просто определите ваш объект над точкой входа mexFunction. Он будет сохраняться до тех пор, пока ваш mex-файл останется в памяти (т.е. вы не очистите mex-файл).