在 Marvin 图像处理框架中绘制文本 Java
Draw text in the Marvin Image Processing Framework Java
我正在对图像中的对象进行分类。
我正在使用 Marvin Image Processing Framework,我成功地分割了对象,但我想在图像上插入文本
这是我的图像分割的输出,我想按条件在对象上方绘制文字。
例如,我编写函数计算每个矩形的平均对角线,如果矩形的对角线大于平均值,我插入 "bolt"。
但是,我找不到任何使用 Marvin 图像处理框架插入文本的方法。
这是我的部分代码:
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 图像处理框架插入,我如何使用这些代码插入文本?
每当您需要 Marvin 不提供但由 Java Graphics 提供的渲染功能时,您可以执行以下操作:
- 使用 image.getBufferedImageNoAlpha();
从 MarvinImage 对象获取 BufferedImage 表示
- 从 BufferedImage 对象获取 Graphics2D。
- 使用 Graphics2D 渲染算法
- 使用 image.setBufferedImage(bufImage);
将 BufferedImage 设置回 MarvinImage
下面的示例使用了一个假设的 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();
}
}
我正在对图像中的对象进行分类。
我正在使用 Marvin Image Processing Framework,我成功地分割了对象,但我想在图像上插入文本
这是我的图像分割的输出,我想按条件在对象上方绘制文字。
例如,我编写函数计算每个矩形的平均对角线,如果矩形的对角线大于平均值,我插入 "bolt"。
但是,我找不到任何使用 Marvin 图像处理框架插入文本的方法。
这是我的部分代码:
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 图像处理框架插入,我如何使用这些代码插入文本?
每当您需要 Marvin 不提供但由 Java Graphics 提供的渲染功能时,您可以执行以下操作:
- 使用 image.getBufferedImageNoAlpha(); 从 MarvinImage 对象获取 BufferedImage 表示
- 从 BufferedImage 对象获取 Graphics2D。
- 使用 Graphics2D 渲染算法
- 使用 image.setBufferedImage(bufImage); 将 BufferedImage 设置回 MarvinImage
下面的示例使用了一个假设的 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();
}
}