OpenCV многопоточные фреймы на Android

Я делаю некоторую работу с OpenCV на Android. Мой код был полностью на интерфейсе Java, и его производительность была очень плохой, поэтому я реализовал почти всю обработку изображений с помощью JNI. Итак, на Java у меня есть:

@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
{
_imgBgrTemp = inputFrame.rgba();
jniFrame(_imgBgrTemp.nativeObj);
return _imgBgrTemp;
}

Таким образом, функция jniFrame () заботится обо всей обработке изображений в C ++, и это привело к хорошему улучшению производительности. Но это все еще около 8 кадров в секунду, и моя камера может делать 30 кадров в секунду без какой-либо обработки изображения.

Посмотрев поближе, я увидел, что даже при обработке кода он использует только 25% процессора моего Android, ведь это Zenfone 2 с четырехъядерным процессором.

Я думаю о том, чтобы он работал в 4-х потоках, поэтому у меня был бы пул FIFO для получения кадров, обработки и отображения его в полученном порядке.

Я думаю, в использовании это:
Создание менеджера для нескольких потоков

Итак, мои вопросы:

Я иду правильным путем?

Есть ли у вас какие-либо советы ?

Что я должен учитывать (поскольку я работаю с JNI)?

Я не публиковал здесь jniFrame (), потому что я не думаю, что это очень актуально, так как это код незавершенного производства, очень большой. Но речь идет о распознавании кубика Рубика и получении его цветов. если вы также можете дать мне какие-либо советы по этому вопросу … но я могу создать другой вопрос только об этой части позже.

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]