如何将Java BufferedImage加载到Matlab中

时间:2014-04-02 21:10:30

标签: java image matlab bufferedimage

我正在尝试从MATLAB调用一些Java方法,并且已经成功返回那些返回字符串,文件等等的东西。但是现在我有一个返回BufferedImage的方法,MATLAB没有YET的一个问题。但是如何在MATLAB中可视化这个BufferedImage?或者至少将其转换为矩阵?

我从MATLAB调用了以下方法(在我的Java类中):

MATLAB代码:

bufferedImage = pictureObject.getBufferedImage 

MATLAB显示了这个......

  

pictureObject =

     

BufferedImage@9d7ae3: type = 13 IndexColorModel: #pixelBits = 8 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@eee0e3 transparency = 1 transIndex = -1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 640 height = 480 #numDataElements 1 dataOff[0] = 0

我正在尝试将上述内容转换为可在MATLAB中显示的内容。

2 个答案:

答案 0 :(得分:3)

对于名为BufferedImage的Java jbi,您可以使用getDatagetPixels来获取MATLAB数组。

使用im2java2d创建测试BufferedImage(太糟糕了,没有java2d2im):

>> I = imread('cameraman.tif');
>> jbi = im2java2d(I)
jbi =
BufferedImage@7ed666f9: type = 0 IndexColorModel: #pixelBits = 8 numCompon<snip>

转换回来:

nrows = jbi.getHeight; ncols = jbi.getWidth;
matImg = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = uint8(reshape(matImg,nrows,ncols)');

以上适用于灰度“cameraman.tif”图像(pixelBits = 8)。


对于颜色“peppers.png”图像(pixelBits = 24):

data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = permute(reshape(data,3,ncols,nrows),[3 2 1]);

或者

data = reshape(typecast(jbi.getData.getDataStorage, 'uint8'), [], ncols, nrows);
matImg = permute(data,[3 2 1]);

有关更多技巧,请参阅this MathWorks answer

答案 1 :(得分:0)

BufferedImage不是Matlab理解的原始Java对象,也没有简单的方法将其转换为matlab数组。你应该

  1. 使用Java GUI(awt)进行可视化,
  2. 在Matlab中创建相同大小的3D数组,并在循环中逐个复制所有像素,或
  3. 将您的图片保存到Matlab理解的文件中(例如png)并从Matlab加载。