Я пытаюсь создать вспомогательную функцию с использованием Java API OpenCV, которая обрабатывает входное изображение и возвращает выходной массив байтов. Входное изображение представляет собой файл jpg, сохраненный на компьютере. Изображение ввода и вывода отображается в пользовательском интерфейсе Java с помощью Swing.Преобразование объекта OpenCV Mat в BufferedImage
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// Load image from file
Mat rgba = Highgui.imread(filePath);
Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_RGB2GRAY, 0);
// Convert back to byte[] and return
byte[] return_buff = new byte[(int) (rgba.total() * rgba.channels())];
rgba.get(0, 0, return_buff);
return return_buff;
Когда return_buff
возвращается и преобразуется в BufferedImage я получаю NULL обратно. Когда я комментирую функцию Imgproc.cvtColor
, return_buff
правильно преобразован в BufferedImage, который я могу отобразить. Кажется, что Imgproc.cvtColor
возвращает объект Mat, который я не мог отобразить на Java.
Вот мой код для преобразования байт [], чтобы BufferedImage:
InputStream in = new ByteArrayInputStream(inputByteArray);
BufferedImage outputImage = ImageIO.read(in);
В коде выше, outputImage является NULL
Кто-нибудь есть какие-либо предложения или идеи?