在我的自定义探测器中,我想将图像从帧分成两半,以便单独处理它们。
这是我到目前为止在我的自定义Detector
中所得到的:
val imageArray = frame?.grayscaleImageData?.array()
val upperImageBuffer = ByteBuffer
.allocate(imageArray?.size ?: 0)
.put(imageArray, 0, imageArray?.size?.div(2) ?: 0)
val upperFrame = Frame.Builder().
setImageData(upperImageBuffer,
frame?.metadata?.width ?: 0,
frame?.metadata?.height?.div(2) ?: 0,
frame?.metadata?.format ?: 16).
setRotation(frame?.metadata?.rotation ?: 0).
build()
val lowerFrame... etc
val upperDetections = delegateDetector.detect(upperFrame)
upperDetections.forEach { key, barcode ->
if (barcode is Barcode) results.append(key, barcode)
}
val lowerDetections = delegateDetector.detect(lowerFrame) etc.
到目前为止,我在两者上使用相同的探测器(这实际上是为了检查我是否会识别出比整帧更多的结果 - 听起来像傻瓜一样,但我保留问题,因为也许未来的某个人需要将一部分图像从一个探测器处理,另一部分由另一个探测器处理。
然而,问题是:我得到两个半部相同的结果,实际上与原始帧相同。我做错了什么?
答案 0 :(得分:1)
grayscaleImageData也包含颜色,但以灰度通道为前缀。也就是说,它格式化为YUV而不仅仅是Y通道(灰度)。
因此,不要使用imageArray.size,而是使用frame.width * frame.height作为大小。