Я получаю это исключение 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 байтов?