Скорость работы OpenCV SimpleBlobDetector

Я использую SimpleBlobDetector OpenCV, чтобы найти определенный набор небольших функций в изображениях. Я работаю в C++ native (JNI) на Android. На моем новом более быстром телефоне он работает хорошо.

Однако на старом более медленном телефоне это слишком медленно. Я обнаружил, что самая медленная часть — это удержание. Изменение трех параметров порога для ускорения просто приводит к тому, что алгоритм перестает работать.

Я нашел версию исходного кода на какой-то веб-странице и начал ее модифицировать.

Вместо этого я пытаюсь использовать адаптивное пороговое значение, а затем выполнить некоторое размытие и расширение после, для хорошей меры, но мне не удалось получить каких-либо разумных результатов. Может параметры не те?

adaptiveThreshold(mGr, mBin, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY_INV, 25, 30);
Mat kernel = getStructuringElement(MORPH_CROSS, Size(3,3), Point(1,1));
erode(mBin, mBin, kernel);
dilate(mBin, mBin, kernel, Point(-1,-1), 5);

Меня смущает, когда слишком много параметров, с которыми приходится возиться. Меня также беспокоит то, что условия изображения будут меняться, и тогда придется использовать другие параметры. Я бы хотел "адаптивный адаптивный" порог, если вы понимаете, о чем я?

Что я могу сделать, чтобы заставить его работать, и как еще мы можем сделать это, чтобы получить более высокую скорость?


person Scott Johansen    schedule 12.02.2018    source источник


Ответы (1)


Предполагая, что вы имеете дело с видео, а не со случайным набором изображений, одним из методов снижения нагрузки на ваше устройство при выполнении этого типа обнаружения является не делать это в самом кадре.

Например, вы можете сделать это даже в 10-м кадре, а не в каждом кадре.

Вы можете поэкспериментировать с различными интервалами, чтобы увидеть, сможете ли вы найти тот, который снижает нагрузку, но при этом достаточно быстро выполняет обнаружение для выбранных вами вариантов использования.

person Mick    schedule 03.04.2018