2017-11-27 1 views
1

나는 이미지에서 객체를 분류하고있다.Marvin Image Processing Framework에서 텍스트 그리기 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

당신이 렌더링 기능 마빈에 의해 제공하지만, 자바 그래픽을 제공하지를 필요로 할 때마다, 당신은 다음을 수행 할 수 있습니다

  1. 가) (image.getBufferedImageNoAlpha를 사용하여 MarvinImage 객체에서의 BufferedImage 표현을 얻으십시오;
  2. BufferedImage 객체에서 Graphics2D를 가져옵니다.
  3. 사용 Graphics2D를 렌더링 알고리즘
  4. 위로 image.setBufferedImage를 사용 MarvinImage (bufImage)에 BufferedImage의 집합;

예는 아래 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(); 
    } 
} 
관련 문제