Я использую SimpleBlobDetector
OpenCV, чтобы найти определенный набор небольших функций в изображениях. Я работаю в C ++ native (JNI) на Android. На моем более новом более быстром телефоне это работает хорошо.
Однако на более старом медленном телефоне он слишком медленный. Я обнаружил, что самая медленная часть — владение. Изменение трех параметров theshold для ускорения процесса просто заставляет алгоритм перестать работать.
Я нашел версию исходного кода на какой-то веб-странице и начал ее модифицировать.
Вместо этого я пытаюсь использовать адаптивный порог и выполнять некоторые размытия и расширения после, для хорошей меры, но мне не удалось получить каких-либо разумных результатов. Возможно, параметры далеко?
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);
Я запутываюсь, когда слишком много параметров, чтобы возиться. Я также обеспокоен тем, что условия изображения будут различаться, и тогда придется использовать другие параметры. Я бы хотел «адаптивный адаптивный» трешолдинг, если вы понимаете, о чем я?
Что я могу сделать, чтобы заставить его работать, и какими еще способами мы можем сделать это, чтобы получить более высокую скорость?
Предполагая, что вы имеете дело с видео, а не со случайным набором изображений, один из способов уменьшить нагрузку на ваше устройство при выполнении этого типа обнаружения состоит в том, чтобы не делать его очень кадровым.
Например, вы можете сделать это даже 10-й кадр, а не каждый кадр.
Вы можете поэкспериментировать с различными интервалами, чтобы увидеть, сможете ли вы найти такой, который уменьшит нагрузку и при этом обнаружит достаточно быстро для выбранных вами вариантов использования.
Других решений пока нет …