Как сгенерировать мат opencv из рядов x col матов параллельно? - PullRequest
0 голосов
/ 06 июня 2019

Я хочу составить 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. Мое другое беспокойство - является ли узкое место частое создание объекта захвата? Есть ли другой способ обойти это?

...