首页 > 解决方案 > OpenCV put() Java/Scala 很慢,如何优化?

问题描述

我有一个图像处理服务器,我正在尝试完成以下工作:

    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 并直接传递给矩阵构造函数,但这违反了一些关于数据为 0 或 null 的 C++ 断言,这对我来说很奇怪,因为显然数据两者都不是,但我不是 C++ 开发人员所以我知道这是怎么回事。

标签: javascalaopencvimage-processingoptimization

解决方案


这对我来说是一个愚蠢的错误。最后一个日志行转储必须加载的矩阵的内容,然后格式化,然后打印到控制台。这就是违反我的 gRPC 超时配置的原因。


推荐阅读