我正在尝试使用 OpenCV Java API 创建一个辅助函数,该函数可以处理输入图像并返回输出字节数组。输入图像是计算机中保存的 jpg 文件。在 Java UI 中使用 Swing 显示输入和输出图像。
当将
以下是我的代码,将byte[]转换为BufferedImage:
在上面的代码中,outputImage是空的。
有人有任何建议或想法吗?
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中无法显示。以下是我的代码,将byte[]转换为BufferedImage:
InputStream in = new ByteArrayInputStream(inputByteArray);
BufferedImage outputImage = ImageIO.read(in);
在上面的代码中,outputImage是空的。
有人有任何建议或想法吗?
Mat
转换为BufferedImage
,而不是关于如何使用OpenCV读取图像,因此我只是删除了对HighGUI
的引用。 - Harald K