将OpenCV Mat对象转换为BufferedImage

我正在尝试使用OpenCV Java API创建一个辅助函数,该函数将处理输入图像并返回输出字节数组。输入图像是保存在计算机中的jpg文件。使用Swing在Java UI中显示输入和输出图像。

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正在返回我在Java中无法显示的Mat对象。

这是我的从byte []转换为BufferedImage的代码:

InputStream in = new ByteArrayInputStream(inputByteArray);
BufferedImage outputImage = ImageIO.read(in);

在上面的代码中,outputImage为NULL

有人有什么建议或想法吗?

哈拉尔德

ImageIO.read(...)javax.imageio通常是软件包)用于从文件格式读取/写入图像。您所拥有的是一个包含“原始”像素的数组。ImageIO从此字节数组确定文件格式是不可能的因此,它将返回null

相反,您应该BufferedImage直接从字节创建一个我不太了解OpenCV,但我假设的结果Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_RGB2GRAY, 0)将是灰度图像(8位/样本,1个样本/像素)。与的格式相同BufferedImage.TYPE_BYTE_GRAY如果此假设正确,则您应该能够:

// Read image to Mat as before
Mat rgba = ...;
Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_RGB2GRAY, 0);

// Create an empty image in matching format
BufferedImage gray = new BufferedImage(rgba.width(), rgba.height(), BufferedImage.TYPE_BYTE_GRAY);

// Get the BufferedImage's backing array and copy the pixels directly into it
byte[] data = ((DataBufferByte) gray.getRaster().getDataBuffer()).getData();
rgba.get(0, 0, data);

这样,可以节省一个大字节数组分配和一个字节数组副本作为奖励。:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:将OpenCV Mat对象转换为ByteBuffer

来自分类Dev

将点向量转换为Mat(OpenCV)

来自分类Dev

如何将 Otaliastudios Frame 对象转换为 OpenCV Mat 对象?

来自分类Dev

我正在尝试将像素数据转换为OpenCV Mat对象

来自分类Dev

从Mat到BufferedImage的OpenCV图像转换

来自分类Dev

OpenCV:将Mat转换为UChar4

来自分类Dev

将numpy.ndarray转换为opencv cv :: Mat

来自分类Dev

将OpenCV Mat转换为数组(可能是NSArray)

来自分类Dev

使用C ++将Mat转换为opencv中的内存

来自分类Dev

OpenCV表单应用程序-将Mat转换为灰度

来自分类Dev

将opencv c ++ mat转换为vector <keypoint>

来自分类Dev

将Point2f []转换为Mat [] OpenCV

来自分类Dev

将OpenGL纹理转换为OpenCV Mat不起作用

来自分类Dev

将vector <Mat>转换为矢量文件Opencv

来自分类Dev

将OpenCV灰度Mat转换为Caffe Blob

来自分类Dev

Libcurl C ++将std :: string转换为cv :: Mat对象

来自分类Dev

Opencv Mat转换为QByteArray

来自分类Dev

如何将BufferedImage转换为黑白?

来自分类Dev

将JavaFX图像转换为BufferedImage

来自分类Dev

将JavaFX图像转换为BufferedImage

来自分类Dev

将List <BufferedImage>转换为Image

来自分类Dev

如何将BufferedImage转换为int []?

来自分类Dev

将向量转换为Mat中的行或OpenCV中的空Mat的有效方法?

来自分类Dev

如何从CVPixelBufferRef转换为openCV cv :: Mat

来自分类Dev

在OpenCV中将Mat转换为数组/向量

来自分类Dev

如何在OpenCV3.0中将CvMat *转换为cv :: Mat

来自分类Dev

OpenCV:将vector <vector <Point >>转换为vector <Mat>,按引用调用时出现问题

来自分类Dev

C ++-将RGB一维数组转换为OpenCV Mat图像

来自分类Dev

将opencv :: Mat转换为std :: string会得到std :: bad_alloc

Related 相关文章

热门标签

归档