Среда обработки изображений Marvin - проблема с плагином Erosion
У меня проблема с плагином Erosion в Marvin Image Processing Framework. Я хочу сделать размывание, но, к сожалению, после этого я не получаю изображение на выходе. Это мой код:
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, без изменений.
Кто-нибудь может мне помочь, пожалуйста?
1 ответ
В вашем коде есть некоторые проблемы. Вы не используете Марвина должным образом.
1. Загрузка плагина
Вы должны создать плагин Erosion, используя MarvinPluginLoader:
tempPlugin = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");
Таким образом, плагин и зависимости Erosion (поскольку плагин может использовать другие плагины) загружены правильно.
2. В случае Erosion, вы не можете использовать один и тот же объект изображения в качестве входного и выходного изображения.
Вы должны использовать две ссылки, например, клонирование:
tempPlugin.process(resultImage.clone(), resultImage);
Пример:
Ниже представлен исходный код, который достигает того же результата, который представлен на странице подключаемого модуля Erosion:
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();
}
}