2013-09-21 112 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's]這樣的高級二值化方法(http:// www .ee.oulu.fi/research/mvmp/mvg/files/pdf/pdf_24.pdf),如果您的掃描質量很差。 http://fiji.sc/wiki/index.php/Auto_Local_Threshold – pvorb

相關問題