2013-02-13 44 views
8
public class BlackWhite { 

    public static void main(String[] args) 
    { 
     try 
     { 
     BufferedImage original = ImageIO.read(new File("colorimage")); 
     BufferedImage binarized = new BufferedImage(original.getWidth(), original.getHeight(),BufferedImage.TYPE_BYTE_BINARY); 

     int red; 
     int newPixel; 
     int threshold =230; 

      for(int i=0; i<original.getWidth(); i++) 
      { 
       for(int j=0; j<original.getHeight(); j++) 
       { 

        // Get pixels 
        red = new Color(original.getRGB(i, j)).getRed(); 

        int alpha = new Color(original.getRGB(i, j)).getAlpha(); 

        if(red > threshold) 
        { 
         newPixel = 0; 
        } 
        else 
        { 
         newPixel = 255; 
        } 
        newPixel = colorToRGB(alpha, newPixel, newPixel, newPixel); 
        binarized.setRGB(i, j, newPixel); 

       } 
      } 
      ImageIO.write(binarized, "jpg",new File("blackwhiteimage")); 
     } 
     catch (IOException e) 
     { 
       e.printStackTrace(); 
     }  
    } 

    private static int colorToRGB(int alpha, int red, int green, int blue) { 
      int newPixel = 0; 
      newPixel += alpha; 
      newPixel = newPixel << 8; 
      newPixel += red; newPixel = newPixel << 8; 
      newPixel += green; newPixel = newPixel << 8; 
      newPixel += blue; 

      return newPixel; 
     } 
} 

मुझे एक काला और सफेद आउटपुट छवि मिली, लेकिन जैसा कि मैंने छवि को ज़ूम किया, मैंने कुछ ग्रे क्षेत्र की खोज की। मैं आउटपुट छवि को केवल काले या सफेद रंगों को रखना चाहता हूं।रंगीन छवि को शुद्ध काले और सफेद छवि में परिवर्तित करने के लिए कैसे करें (0-255 प्रारूप)

कृपया मुझे बताएं कि क्या मैं अपने वर्तमान दृष्टिकोण में सही या गलत हूं? और यदि मैं हूं, तो कृपया एक और तरीका सुझाएं।

+0

आप 'अल्फा' क्यों देखते हैं? – TheBronx

उत्तर

16

आप छवि को सही ढंग से रंग से काले और सफेद में परिवर्तित कर रहे हैं; हालांकि, जब आप आउटपुट को JPEG के रूप में सहेजते हैं तो कुछ रंग lossy compression के परिणामस्वरूप बनाए जाते हैं।

बस आउटपुट को PNG (या JPEG के अलावा कुछ भी) में सहेजें, और आउटपुट केवल काले और सफेद होगा, जैसा कि आपने अपेक्षा की थी।

ImageIO.write(binarized, "png",new File("blackwhiteimage")); 

उदाहरण के लिए, यदि आप उस PNG के रूप में सहेजा एक द्विआधारी छवि है हिस्टोग्राम (केवल सख्ती से काले और सफेद पिक्सल) की तरह कुछ हो सकता है:

PNG histogram

और एक ही छवि है, तो के लिए आप JPEG के रूप में सहेजा है, तो आप देख सकते हैं कि हिस्टोग्राम में सफेद और काले रंग के पास कुछ पिक्सल प्रकट करने के लिए शुरू

JPEG histogram

+0

या gif, tif, bmp, ... – Junuxx

+0

हाँ कुछ भी 'जेपीईजी' मैं बस एक उदाहरण दे रहा था – iTech

+0

धन्यवाद यह काम करता है :) – Yogesh