OpenCV генерирует исключение при вызове Mat.put () с прямым байтовым буфером - PullRequest
0 голосов
/ 05 июля 2019

Я получаю это исключение Java в своем коде с использованием OpenCV SDK для Android:

07-05 09: 03: 13.859 7043 7117 E AndroidRuntime: java.lang.UnsupportedOperationException: Предоставленный номер элемента данных (1228807) должен быть кратным количеству каналов Mat (3) 07-05 09: 03: 13.859 7043 7117 E AndroidRuntime: at org.opencv.core.Mat.put (Mat.java:1011)

Mat srcIrImage = new Mat(width * 2,height * 2, CV_8UC3);

srcIrImage.put(0,0, buffer.array());  ==> throws the exception

буфер - это прямой байтовый буфер, выделенный таким образом:

buffer = ByteBuffer.allocateDirect(previewRGBAArraySize).order(ByteOrder.LITTLE_ENDIAN);

При использовании ByteBuffer.allocate это будет работать, но у меня есть ограничение на использование прямых байтовых буферов.

Может быть, OpenCV не обрабатывает Little-endian как следует. То, что OpenCV называет номером элемента данных 1228807, похоже, является емкостью буфера. Этот размер составляет 1228800, когда не используются прямые буферы. Почему здесь разница в 7 байтов?

...