我在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文件做同样的事情,没有改变。
有人可以帮帮我吗?
答案 0 :(得分:3)
您的代码中存在一些问题。你没有正确使用马文。
<强> 1。加载插件
您必须使用 MarvinPluginLoader 创建一个Erosion插件:
tempPlugin = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");
因此,Erosion插件和依赖项(因为插件可能使用其他插件)已正确加载。
<强> 2。在侵蚀的情况下,您不能使用相同的图像对象作为输入和输出图像
您必须使用两个引用,例如克隆:
tempPlugin.process(resultImage.clone(), resultImage);
示例:强>
下面是一个源代码,它实现了Erosion Plug-in Page:
中提供的相同结果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();
}
}