Я хочу составить JavaCV-мат из декодирования списка байтов [] и компоновки по строкам и столбцам, как показано ниже:
int index = 0;
MatVector colVector = new MatVector();
OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
for (int i = 0; i < grid.getRows(); ++i)
{
Mat rowMat = new Mat();
MatVector vector = new MatVector();
for (int j = 0; j < grid.getColumns(); ++j)
{
int tileId = grid.getToItemIdList().get(index);
List<Byte> tileBinary = tileBinaryMap.get(tileId);
FFmpegFrame grabber = new FfmpegFrameGrabber(new ByteArrayInputStream(Bytes.toArray(tileBinary));
grabber.start();
Frame frame = grabber.grab();
Mat tileMat = converter.convertToMat(frame);
vector.push_back(tileMat);
index++;
}
hconcat(vector, rowMat);
colVector.push_back(rowMat);
}
Mat imageMat = new Mat();
vconcat(colVector, imageMat);
Очевидно, что эта проблема параллельна, я думаю создать большой мат с предварительно рассчитанными шириной и высотой (может быть, даже глубиной, поскольку они являются изображениями), затем сгенерировать каждую плитку с потоком и заполнить декодированные данные в мат. В настоящее время я просто горизонтально объединяю каждый столбец, а затем объединяю вертикально все строки. Я не знаю, как манипулировать указателем со смещением в JavaCV.
Мое другое беспокойство - является ли узкое место частое создание объекта захвата? Есть ли другой способ обойти это?