2013-09-21 5 views
4

기존의 컬러 BufferedImage를 단색으로 변환하려면 어떻게해야합니까? 흑백으로 된 두 개의 RGB 코드 사이에서 이미지가 완전히 분리되기를 바랍니다. 그래서 이미지 주위에 배경의 밝거나 어두운 음영이 있고 배경이 흰색으로 변환되면 테두리를 흰색으로 변환하는 등의 작업을 수행해야합니다.BufferedImage를 흑백으로 변환하는 방법은 무엇입니까?

어떻게하면됩니까?

이미지를 저장하고 디스크에서로드하는 데 필요한 경우 필요한 경우 수행 할 수 있습니다.

편집 : 코드는이 테스트 : 사용

package test; 

import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.util.HashSet; 
import javax.imageio.ImageIO; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      BufferedImage img = ImageIO.read(new File("http://i.stack.imgur.com/yhCnH.png")); 
      BufferedImage gray = new BufferedImage(img.getWidth(), img.getHeight(), 
        BufferedImage.TYPE_BYTE_GRAY); 

      Graphics2D g = gray.createGraphics(); 
      g.drawImage(img, 0, 0, null); 

      HashSet<Integer> colors = new HashSet<>(); 
      int color = 0; 
      for (int y = 0; y < gray.getHeight(); y++) 
      { 
       for (int x = 0; x < gray.getWidth(); x++) 
       { 
        color = gray.getRGB(x, y); 
        System.out.println(color); 
        colors.add(color); 
       } 
      } 

      System.out.println(colors.size()); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

이미지 :

image

이 사용을, 내가 마지막 출력으로 (24)의 출력을 얻을 즉 24가 있었다 이 이미지에서 발견 된 색은 2가되어야합니다.

+1

좋아요 [this] (http://stackoverflow.com/a/14514294/418556)? –

+0

@AndrewThompson 네, 그 중 하나의 그레이 스케일 예제와 같습니다! 모든 색상을 회색 및 흰색으로 완전히 변환합니까? – user2790209

+0

@AndrewThompson 글쎄, 해봤지만, 이미지 내의 다른 색상은 그대로 남아있다. 회색/흰색은 아니다. 다른 제안? – user2790209

답변

8

해결책은 BufferedImage.TYPE_BYTE_BINARY 대신 TYPE_BYTE_GRAY 형식으로. BINARY를 사용하면 순수한 검은 색 & 사본이 만들어지며 b & w를 제외한 색상은 만들어지지 않습니다. 꽤 보이지는 않지만 OCR 같은 곳에서는 색상이 정확한 곳이 필요합니다.

+0

[Sauvola의] (http : // www와 같은 고급 이진화 방법을 사용하는 것을 고려해야합니다. .ee.oulu.fi/research/mvmp/mvg/files/pdf/pdf_24.pdf)를 참조하십시오. http://fiji.sc/wiki/index.php/Auto_Local_Threshold – pvorb