2017-10-03 2 views
2

지나치게 미리 정의 된 메서드없이 컬러 이미지를 그레이 스케일로 변환하려고합니다.컬러 이미지를 Java에서 그레이 스케일 이미지로 변환

컬러 이미지를 읽는 코드는 여기에

주요 방법 :

BufferedImage img = null; 
try { 
    img = ImageIO.read(new File(IMG)); 

    int[][] pixelData = new int[img.getHeight() * img.getWidth()][3]; 
    int[] rgb; 

    int counter = 0; 
    for (int i = 0; i < img.getWidth(); i++) { 
     for (int j = 0; j < img.getHeight(); j++) { 
      rgb = getPixelData(img, i, j); 

      for (int k = 0; k < rgb.length; k++) { 
       pixelData[counter][k] = rgb[k]; 
      } 
      counter++; 
     } 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

또 다른 방법 : 나는 그레이 스케일로 출력을 변환해야

private static int[] getPixelData(BufferedImage img, int x, int y) { 
    int argb = img.getRGB(x, y); 
    int rgb[] = new int[] { 
     (argb >> 16) & 0xff, //red 
     (argb >> 8) & 0xff, //green 
     (argb  ) & 0xff //blue 
    }; 

    System.out.println("rgb: " + rgb[0] + " " + rgb[1] + " " + rgb[2]); 
    return rgb; 
} 

... 여기에 출력의 일부입니다.

rgb: 255 255 255 
rgb: 255 255 255 
rgb: 255 255 255 
rgb: 255 255 255 
rgb: 255 255 255 
rgb: 255 255 255 

모든 픽셀을 RGB로 확인하고 회색 음영으로 변환해야합니다.

답변

2

신속하고 더러운 방법과 같다 :

int avg = ((rgb[0] + rgb[1] + rgb[2])/3); 

    int grey_rgb = 0; 
    for(int i = 0; i < 4; i++) { 
     grey_rgb <<= 8; 
     grey_rgb |= avg & 0xFF; 
    } 

    img.setRGB(x, y, grey_rgb); 

모든 RGB 성분이 동일한 값 (예, 240 (240) 240.)를 포함 할 때 회색 뉘앙스가 얻어진다. 이를 달성하기 위해서는 단순히 색상의 RGB 구성 요소에 대한 숫자 표현의 평균이 필요합니다.

고급 알고리즘을 보려면 tannerhelland.com/3643/grayscale-image-algorithm-vb6을 확인하십시오.

관련 문제