如何从行x col垫并行生成opencv垫?

时间:2019-06-06 11:14:01

标签: multithreading opencv ffmpeg javacv opencv-mat

我想通过解码byte []列表并按行和列进行合成来构成JavaCV的Mat,例如下面的代码:

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中的偏移量来操作指针。 我另一个担心的是,频繁创建的采集器对象是否是瓶颈?有另一种解决方法吗?

0 个答案:

没有答案