Я пытаюсь придумать эффективный способ чтения / копирования фрагментов TensorBuffer
как opencv Mat
s. TensorBuffer
- это выход модели tflite
, это стек из N изображений (тепловых карт для различных объектов), и мне нужно обрабатывать фрагменты по отдельности:
Tensorbuffer maps // shape = [1, height, width, N];
for (int c=0; c<maps.shape()[3]; ++c) {
// get c-th slice as Mat
Mat map = ??? // mats[0,:,:,c]
// do stuff with map
}
Я могу скопировать пиксель карты на пиксель в двойном l oop, но, конечно, в java это ужасно медленно:
РЕДАКТИРОВАТЬ: исправлены неверные индексы
Tensorbuffer maps // shape = [1, height, width, N];
int[] mapsShape = maps.shape();
for (int c=0; c<mapsShape[3]; ++c) {
// get c-th slice as Mat
Mat mat = new Mat(mapsShape[1], mapsShape[2], CvType.CV_32F1) // map[1,:,:,c]
float[] fa = maps.getFloatArray();
for (int j=0; j<mapsShape[1]; ++j) {
for (int i=0; i<mapsShape[2]; ++i) {
map.put(j, i, fa[c + (i+j*mapsShape[2])*mapsShape[3]]);
}
}
// do stuff with map
}
I ' Я полностью вне идей, любая помощь приветствуется.