2017-11-27 12 views
1

私は画像内のオブジェクトを分類しています。Marvin画像処理フレームワークでテキストを描画するJava

私はMarvin Image Processing Frameworkを使用している、と私は成功したオブジェクトをセグメント化するんだけど、私はこれは私の画像分割の出力である、と私は描きたい

enter image description here

画像上にテキストを挿入したいです条件によってオブジェクトの上のテキスト。

たとえば、各矩形の平均対角線を計算する関数を作成し、矩形の対角線が平均より大きい場合は「ボルト」を挿入します。

しかし、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"); 
} 

私はマーヴィンの画像処理フレームワークに挿入する任意の方法を持っていない場合、どのように私はこれらのコードを使用してテキストを挿入することができますか?

答えて

0

あなたは次の操作を行うことができ、マービンによって提供されていないレンダリング機能を必要とするが、Javaグラフィックスが提供するたび:

  1. image.getBufferedImageNoAlpha()を使用してMarvinImageオブジェクトからのBufferedImage表現を取得します。
  2. BufferedImageオブジェクトからGraphics2Dを取得します。
  3. Graphics2Dレンダリングアルゴリズムを使用する
  4. BufferedImageをimage.setBufferedImage(bufImage);を使用してMarvinImageに戻します。

以下の例では、あなたのoutput.jpg画像の座標を用いて作成した仮想的MarvinSegmentオブジェクトを使用します。コードにのdrawStringMarvin(...)を追加するだけです。

Parts1_output_2.jpg:

enter image description here

ソースコード:

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(); 
    } 
}