2012-01-23 7 views
2

사진을 입력으로 사용하려고 시도한 다음 해당 사진을 조작하고 (특히 그레이 스케일로 만들기를 원함) 새 이미지를 출력하려고합니다. 이것은 내가 편집하기 위해 편집하고있는 코드의 스 니펫입니다. 내가 무엇을 바꿀 수 있는지/다음에는 할 수있는 아이디어. 대단히 감사합니다!입력으로 사진 찍기, 그레이 스케일로 만든 다음 출력하기

public boolean recieveFrame (Image frame) { 
    int width = frame.width(); 
    int height = frame.height(); 

    for (int i = 0; i < width; i++) { 
     for (int j = 0; j < height; j++) { 
      Color c1 = frame.get(i, j); 
      double greyScale = (double) ((Color.red *.3) + (Color.green *.59) + (Color.blue * .11)); 
      Color newGrey = Color.greyScale(greyScale); 
      frame.set(i, j, newGrey); 
     } 
    } 

    boolean shouldStop = displayImage(frame); 
    return shouldStop; 
} 
+0

[이미지 처리 방법] (http://stackoverflow.com/questions/6471340/how-do-i-desaturate-a-bufferedimage-in-java/6471524#6471524) – mre

답변

0

나는 이미 가지고있는 것에 가깝게하려고 노력할 것입니다. 따라서 저는 그레이 스케일로 변환하는 기술을 찾기보다는 픽셀 레벨 처리 방법 인 Image을 찾고 있다고 가정합니다.

첫 번째 단계는 이미지가 BufferedImage이어야한다는 것입니다. 이것은 당신이 ImageIO에서 기본적으로 무엇을 얻을 것입니다,하지만 당신은 이미지의 다른 유형이있는 경우, 당신은 BufferedImage을 만들 수 있으며, 처음에 다른 이미지를 페인트 :

BufferedImage buffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
Graphics2D g = buffer.createGraphics(); 
g.drawImage(image, 0, 0); 
g.dispose() 

을 그런 다음 같은 픽셀에서 작동 할 수 이 :

public void makeGrey(BufferedImage image) { 
    for(int x = 0; x < image.getWidth(); ++x) { 
     for(int y = 0; y < image.getHeight(); ++y) { 
     Color c1 = new Color(image.getRGB(x, y)); 
     int grey = (int)(c1.getRed() * 0.3 
         + c1.getGreen() * 0.59 
         + c1.getBlue() * .11 
         + .5); 
     Color newGrey = new Color(grey, grey, grey); 
     image.setRGB(x, y, newGrey.getRGB()); 
     } 
    } 
} 

이 코드는 매우 느립니다. 훨씬 더 빠른 옵션은 BufferedImage의 모든 픽셀을 int[]으로 추출하여 처리 한 다음 다시 이미지로 설정하는 것입니다. 이 버전은 javadoc에서 찾을 수있는 setRGB()/getRGB() 메서드의 다른 버전을 사용합니다.

+0

플로팅 - (예 :'gray = red * 30 + green * 59 + blue * 11)/100')을 사용하여 소수점 연산을 수행합니다. 하지만 이것이 충분히 빠른 속도 향상인지는 확실하지 않습니다. –

+0

'white'에 대해'grey' 값이 255를 넘지 않았습니까? 그 공식은 어떻게 고안 되었습니까? –

+0

@Andrew : 내가 준 공식을 사용하면 (255,255,255)의 픽셀 색상은 255의 회색 값을 갖게됩니다.이 공식은 사람의 지각 감도 (30 % 빨간색 + 59 % 녹색)에 따라 색상을 회색조로 변환하는 데 널리 사용되는 공식입니다 + 11 % 파란색). –

관련 문제