【问题标题】:How to load a Java BufferedImage into Matlab如何将 Java BufferedImage 加载到 Matlab 中
【发布时间】:2014-04-02 21:10:29
【问题描述】:

我正在尝试从 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 中可视化的内容。

【问题讨论】:

  • 我的回答有没有得到你需要的东西?

标签: java image matlab bufferedimage


【解决方案1】:

对于名为 jbi 的 Java BufferedImage,您可以使用 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

【讨论】:

  • 它给了我错误:发生 Java 异常:java.lang.OutOfMemoryError: Java 堆空间在 java.awt.image.SampleModel.getPixels(Unknown Source) at java.awt.image.Raster.getPixels (来源不明)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多