Java는 이미지를 로드하고 이미지와 회색조 이미지를 표시합니다.
Java 기본 패키지는 우리가 일반적으로 사용하는 이미지 클래스를 제공합니다. 여기에는 java.awt.image.BufferedImage, javax.imageio.ImageIO 등이 포함됩니다. 실제로 이 두 클래스로 충분합니다. 전자는 이미지에 대한 기본적인 작업에 관한 것이고, 후자는 이미지를 읽는 것에 관한 것입니다.
이미지 불러오기:
BufferedImage img = null; try{ img = ImageIO.read(new FileInputStream("/home/eple/DIP/o.jpg")); }catch (IOException e) { //e.printStackTrace(); }
우분투 환경에서 실행중이라 파일 경로가 윈도우와 조금 다릅니다.
코드를 더욱 다양하게 만들기 위해 이미지 처리 클래스인 이미지개를 새로 만들었습니다.
public class Image{ public int h; //高 public int w; //宽 public int[] data; //像素 public boolean gray; //是否为灰度图像 public Image(BufferedImage img){ this.h = img.getHeight(); this.w = img.getWidth(); this.data = img.getRGB(0, 0, w, h, null, 0, w); this.gray = false; toGray(); //灰度化 } public Image(BufferedImage img,int gray){ this.h = img.getHeight(); this.w = img.getWidth(); this.data = img.getRGB(0, 0, w, h, null, 0, w); this.gray = false; } public Image(int[] data,int h,int w){ this.data = (data == null) ? new int[w*h]:data; this.h = h; this.w = w; this.gray = false; } public Image(int h,int w){ this(null,h,w); } public BufferedImage toImage(){ BufferedImage image = new BufferedImage(this.w, this.h, BufferedImage.TYPE_INT_ARGB); int[] d= new int[w*h]; for(int i=0;i<this.h;i++){ for(int j=0;j<this.w;j++){ if(this.gray){ d[j+i*this.w] = (255<<24)|(data[j+i*this.w]<<16)|(data[j+i*this.w]<<8)|(data[j+i*this.w]); }else{ d[j+i*this.w] = data[j+i*this.w]; } } } image.setRGB( 0, 0, w, h, d, 0, w ); return image; } }
이렇게 하면 Java 자체에서 제공하는 메소드에 의존하지 않고 이미지를 우리가 정의한 클래스로 변환하기만 하면 됩니다. 예를 들어 Android에서는 픽셀 읽기 및 생존이 다음과 같으며 관련 기능을 대체하면 됩니다.
//android 中的获取方式RGB分量 pixelsA = Color.alpha(color); pixelsR = Color.red(color); pixelsG = Color.green(color); pixelsB = Color.blue(color); // 根据新的RGB生成新像素 newPixels[i] = Color.argb(pixelsA, pixelsR, pixelsG, pixelsB);
위 클래스에는 이미지 픽셀 정보를 읽고 이를 int 배열로 저장하고 int 배열을 Bufferedmage로 변환하는 메서드가 포함되어 있습니다. 다음으로 이미지, 즉 그레이 스케일을 탈색하는 방법에 대해 이야기하겠습니다.
이전 기사에서 언급했듯이 이미지 처리에 관해서는 이미지의 밝기 정보, 즉 그레이 스케일에 더 관심이 있습니다. 컬러 이미지를 그레이 스케일 이미지로 변환하는 방법은 무엇입니까? 아주 간단합니다. R, G, B 세 값을 동일하게 만들면 됩니다. 그렇다면 이 값과 R, G, B의 원래 값 사이에는 어떤 관계가 있을까요?
일반적으로 실험식 Gray=R×0.299+G×0.587+B×0.114를 사용하거나 평균값을 직접 취합니다. 이전의 경험식은 인간의 눈으로 관찰한 것과 더 일치합니다. Grayscale 함수는 다음과 같습니다.
public void toGray(){ if(!gray){ this.gray = true; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { int c = this.data[x + y * w]; int R = (c >> 16) & 0xFF; int G = (c >> 8) & 0xFF; int B = (c >> 0) & 0xFF; this.data[x + y * w] = (int)(0.3f*R + 0.59f*G + 0.11f*B); //to gray } } } }
처리 효과는 다음과 같습니다.
위는 자바 로딩 이미지, 디스플레이 이미지 및 이미지의 회색조 콘텐츠에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

자바의 암스트롱 번호 안내 여기에서는 일부 코드와 함께 Java의 Armstrong 번호에 대한 소개를 논의합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다
