OpenCV put() Java/Scala работает медленно, как оптимизировать?

avatar
Nimrod Sadeh
8 августа 2021 в 21:41
67
1
0

У меня есть сервер обработки изображений, и я пытаюсь выполнить следующее:

    logger info "calling detect"
    // read from file, pretty fast
    val bytes = new FileInputStream(frame getPath) readAllBytes()
    // I can tell because this line executes immediately
    logger info (s"the image was read as ${bytes length}")
    // also trivial
    val imageMat = new Mat(frame.width, frame.height, 1)
    logger info "constructed empty matrix..."
    // this takes a long time, as I cannot see the log line that follows
    imageMat put (0, 0, bytes)
    logger info s"read image as matrix: ${imageMat dump()}"

Этот фрагмент загружает изображение (.bgr888) из массива байтов, создает пустую матрицу с шириной/длиной изображения (которую я получил из запроса gRPC), затем заполняет матрицу значениями байтовый массив. Только этот последний шаг занимает вечность.

Я попытался обернуть массив байтов как ByteBuffer и передать его непосредственно в конструктор матрицы, но это нарушило некоторое утверждение C++ о том, что данные равны 0 или null, что странно для меня, поскольку очевидно, что данные не являются ни тем, ни другим, но я не являюсь Разработчик C++, так что не понимаю, что с этим происходит.

Источник
Emiliano Martinez
9 августа 2021 в 09:07
0

Вы можете добавить код, который вы пробовали, используя ByteBuffer?

Ответы (1)

avatar
Nimrod Sadeh
9 августа 2021 в 20:25
0

Это была глупая ошибка с моей стороны; последняя строка журнала выводит содержимое матрицы, которую необходимо загрузить, затем отформатировать, а затем вывести на консоль. это то, что нарушает мои настройки времени ожидания gRPC.