Я переношу код рабочего стола C++ OpenCV на Android и использую opencv4android. Со временем я планирую перейти на NTK, но пока, поскольку я новичок в разработке для Android, я подумал, что так будет проще.
Функция OpenCV занимает 37 мс на моем рабочем столе i7-4790 (один поток и без графического процессора). Функция на Android Nexus 4 занимает 10 557 мс. Я знал, что могу ожидать некоторого замедления из-за накладных расходов на java-нативные вызовы, но эту огромную разницу трудно объяснить. Я выполняю много операций с пикселями с помощью get/put, но на относительно небольших изображениях (около 500x500px).
Я помещаю свою функцию opencv в следующий метод:
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
// opencv4android code
...
}
}
}
}
Что-то не так (возможно, связанное с многопоточностью) или производительность нормальная? Какого замедления следует ожидать? А как быть с НТК?
Большое спасибо,
Гийом