java - 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++ 开发人员所以我知道这是怎么回事。
解决方案
这对我来说是一个愚蠢的错误。最后一个日志行转储必须加载的矩阵的内容,然后格式化,然后打印到控制台。这就是违反我的 gRPC 超时配置的原因。
推荐阅读
- javascript - 如果文本框值等于单选按钮值,则单选按钮将激活
- python - 节点 #0 没有“标签”属性?怎么会这样
- vim - 在 Vim 中禁用缩写
- python - 将数字熊猫中的每个数字相乘
- java - 我应该如何处理这个 Eclipse 错误(html 预览)?
- javascript - Ajax 从表单输入插入多条记录,将计数器添加到隐藏输入
- php - 邮件发送成功,但未使用 codeigniter 接收邮件(Godday 电子邮件(共享服务器))
- jquery - 带有查询参数的 API
- javascript - 角度过滤日期:传递本地时区参数和不传递时区参数的区别
- java - 如何实现偏好?