Рисование текста в среде обработки изображений Marvin Java
Я работаю над классифицирующим объектом на изображении.
Я использую Marvin Image Processing Framework, и я успешно сегментирую объект, но я хочу вставить текст на изображение
Это результат моей сегментации изображения, и я хочу нарисовать текст над объектом по условию.
Например, я пишу функцию, которая вычисляет среднюю диагональ каждого прямоугольника, и вставляю "болт", если диагональ прямоугольника больше среднего.
Однако я не смог найти какой-либо метод для вставки текста с помощью Marvin Image Processing Framework.
Это часть моего кода:
public Recognition() {
MarvinImage input = MarvinImageIO.loadImage("Parts1.jpg");
MarvinImage copy = input.clone();
filterBlue(copy);
MarvinImage bin = MarvinColorModelConverter.rgbToBinary(copy, 127);
morphologicalClosing(bin.clone(), bin, MarvinMath.getTrueMatrix(30, 30));
copy = MarvinColorModelConverter.binaryToRgb(bin);
MarvinSegment[] marvSeg = floodfillSegmentation(copy);
calculateAvg(marvSeg);
for(int i = 1; i < marvSeg.length; i++)
{
MarvinSegment segment = marvSeg[i];
input.drawRect(segment.x1, segment.y1, segment.width, segment.height, Color.ORANGE);
input.drawRect(segment.x1+1, segment.y1+1, segment.width, segment.height, Color.ORANGE);
if (calcDiag(segment.width, segment.height) > recDiagonalAverage)
{
//draw string "bolt" if current diagonal is larger than average
}
}
MarvinImageIO.saveImage(input, "output.jpg");
}
Если у меня нет метода для вставки с помощью Marvin Image Processing Framework, как я могу вставить текст с этим кодом?
1 ответ
Каждый раз, когда вам нужна функция рендеринга, не предоставляемая Marvin, но предоставляемая Java Graphics, вы можете делать следующее:
- Получить представление BufferedImage из объекта MarvinImage с помощью image.getBufferedImageNoAlpha();
- Получить Graphics2D из объекта BufferedImage.
- Используйте Graphics2D алгоритмы рендеринга
- Установите BufferedImage обратно к MarvinImage, используя image.setBufferedImage(bufImage);
В приведенном ниже примере используется гипотетический объект MarvinSegment, созданный с использованием координат вашего изображения output.jpg. Вам просто нужно добавить drawStringMarvin(...) в ваш код.
Parts1_output_2.jpg:
Исходный код:
public class DrawStringExample {
private static Font FONT = new Font("Verdana", Font.BOLD, 28);
public DrawStringExample() {
MarvinImage image = MarvinImageIO.loadImage("./res/Parts1_output.jpg");
MarvinSegment segment = new MarvinSegment(537, 26, 667, 96);
drawStringMarvin("bolt", segment, image);
MarvinImageIO.saveImage(image, "./res/Parts1_output_2.jpg");
}
private void drawStringMarvin(String text, MarvinSegment segment, MarvinImage image) {
BufferedImage bufImage = image.getBufferedImageNoAlpha();
Graphics2D g2d = (Graphics2D)bufImage.getGraphics();
g2d.setFont(FONT);
g2d.drawString(text, segment.x1, segment.y1+FONT.getSize());
image.setBufferedImage(bufImage);
}
public static void main(String[] args) {
new DrawStringExample();
}
}