1

Marvin 图像处理框架中的 Erosion 插件有问题。我想做腐蚀,但不幸的是,在那之后我没有得到输出图像。这是我的代码:

tempPlugin  = new Erosion();
boolean[][] m = new boolean[][] {
{true,true,true},
{true,true,true},
{true,true,true}
};
tempPlugin.setAttributes("matrix", m);
resultImage = MarvinColorModelConverter.rgbToBinary(resultImage, 127);
tempPlugin.process(resultImage, resultImage);
resultImage = MarvinColorModelConverter.binaryToRgb(resultImage);
resultImage.update();
imagePanelNew.setImage(resultImage);

我正在使用 Java JDK 1.7 和 Marvin Framework 1.5.0 当然,我已经尝试对 .jar 文件执行相同的操作,没有进行任何更改。

有人可以帮助我吗?

4

1 回答 1

3

您的代码中存在一些问题。您没有正确使用 Marvin。

1.加载插件

您必须使用MarvinPluginLoader创建 Erosion 插件:

tempPlugin  = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");

因此,正确加载了 Erosion 插件和依赖项(因为插件可能使用其他插件)。

2.在Erosion的情况下,不能使用相同的图像对象作为输入和输出图像

您必须使用两个引用,例如克隆:

tempPlugin.process(resultImage.clone(), resultImage);



例子:

下面给出了一个源代码,它实现了与侵蚀插件页面中呈现的相同结果:

public class SimpleExample {

private MarvinImagePlugin tempPlugin;

public SimpleExample(){

    // 1. Load and set up plug-in.
    tempPlugin  = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");

    boolean[][] m = new boolean[][] {
    {true,true,true},
    {true,true,true},
    {true,true,true}
    };

    tempPlugin.setAttributes("matrix", m);

    // 2. Load image
    MarvinImage image = MarvinImageIO.loadImage("./res/erosion_in.png");
    MarvinImage resultImage = MarvinColorModelConverter.rgbToBinary(image, 127);

    // 3. Process and save image
    tempPlugin.process(resultImage.clone(), resultImage);
    resultImage = MarvinColorModelConverter.binaryToRgb(resultImage);
    resultImage.update();
    MarvinImageIO.saveImage(resultImage, "./res/erosion_out.png");
}

public static void main(String[] args) {
    new SimpleExample();
}

}
于 2014-05-09T14:00:54.820 回答