ホームページ  >  記事  >  Java  >  画像処理の基本操作をJavaで実装する

画像処理の基本操作をJavaで実装する

WBOY
WBOYオリジナル
2023-06-18 16:58:221865ブラウズ

デジタル技術の発展に伴い、画像処理技術がますます注目を集めています。画像処理では、そのシンプルさ、学習の容易さ、およびクロスプラットフォームの特性により、Java 言語が人気があります。この記事ではJavaによる画像処理の基本操作を紹介します。

1. 画像の読み取りと表示

Java では、javax.imageio.ImageIO クラスを使用して画像を読み取り、ロードできます。 ImageIO は、ファイル、URL、または入力ストリームに保存されている画像を読み取り、Java BufferedImage オブジェクトに変換できる静的メソッド read() を提供します。

以下は、画像を読み取って表示するサンプルコードです。

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageIOExample {

  public static void main(String[] args) throws IOException {
    // 读取图像
    File file = new File("image.jpg");
    BufferedImage image = ImageIO.read(file);
    // 显示图像
    ImageViewer viewer = new ImageViewer(image);
    viewer.show();
  }

}

このうち、ImageViewer は、BufferedImage オブジェクトをウィンドウ内に表示できるカスタム画像ビューア クラスです。ここでは詳細には触れませんが、読者は自分で実装できます。

2. 画像のスケーリング

画像のスケーリングは、画像処理における最も基本的な操作の 1 つです。 Java は、画像のスケーリングを実装するための AffineTransform クラスを提供します。拡大縮小する場合は、水平方向と垂直方向の拡大縮小率である拡大縮小率を指定する必要があります。

以下は画像スケーリングのサンプル コードです:

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageScalingExample {

  public static void main(String[] args) throws IOException {
    // 读取图像
    File file = new File("image.jpg");
    BufferedImage image = ImageIO.read(file);
    // 缩放图像
    int width = image.getWidth() / 2;
    int height = image.getHeight() / 2;
    BufferedImage scaledImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = scaledImage.createGraphics();
    AffineTransform transform = AffineTransform.getScaleInstance(0.5, 0.5);
    g2d.drawRenderedImage(image, transform);
    g2d.dispose();
    // 显示图像
    ImageViewer viewer = new ImageViewer(scaledImage);
    viewer.show();
  }

}

上記のコードでは、BufferedImage オブジェクトを作成し、その幅と高さを指定し、drawRenderedImage() を通じてスケーリングされた画像を描画します。 Graphics2D オブジェクト画像のメソッド。 AffineTransform クラスの getScaleInstance() メソッドは、指定された水平および垂直スケール係数を実装する AffineTransform オブジェクトを返します。

3. 画像の回転

AffineTransform クラスを使用して、Java で画像を回転することもできます。回転する場合は、回転角度と回転中心点を指定する必要があります。

以下は画像回転のサンプル コードです:

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageRotationExample {

  public static void main(String[] args) throws IOException {
    // 读取图像
    File file = new File("image.jpg");
    BufferedImage image = ImageIO.read(file);
    // 旋转图像
    int width = image.getWidth();
    int height = image.getHeight();
    BufferedImage rotatedImage = new BufferedImage(height, width, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = rotatedImage.createGraphics();
    AffineTransform transform = new AffineTransform();
    transform.translate(height / 2, width / 2);
    transform.rotate(Math.toRadians(90));
    transform.translate(-width / 2, -height / 2);
    g2d.drawRenderedImage(image, transform);
    g2d.dispose();
    // 显示图像
    ImageViewer viewer = new ImageViewer(rotatedImage);
    viewer.show();
  }

}

上記のコードでは、BufferedImage オブジェクトを作成し、その幅と高さを指定し、drawRenderedImage() を通じて回転された画像を描画します。 Graphics2D オブジェクト画像のメソッド。 AffineTransform クラスのtranslate() メソッドとrotate() メソッドは回転操作を実装します。translate() メソッドは画像の中心点の移動に使用され、rotate() メソッドは画像の回転に使用されます。

4. 画像グレースケール

画像グレースケールは、カラー画像をグレースケール画像に変換する操作です。 Java では、画像は次の式でグレースケール化できます:

gray = 0.299 red 0.587 green 0.114 * blue

以下はグレースケール画像のサンプル コードです。

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageGrayscaleExample {

  public static void main(String[] args) throws IOException {
    // 读取图像
    File file = new File("image.jpg");
    BufferedImage image = ImageIO.read(file);
    // 灰度化图像
    int width = image.getWidth();
    int height = image.getHeight();
    BufferedImage grayscaleImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D g2d = grayscaleImage.createGraphics();
    g2d.drawImage(image, 0, 0, null);
    g2d.dispose();
    // 显示图像
    ImageViewer viewer = new ImageViewer(grayscaleImage);
    viewer.show();
  }

}

上記のコードでは、BufferedImage オブジェクトを作成し、そのタイプを TYPE_BYTE_GRAY として指定し、Graphics2D オブジェクトのdrawImage() メソッドを通じてカラー イメージをグレースケール イメージに変換します。

5. 画像の 2 値化

画像の 2 値化は、グレースケール画像を白黒画像に変換する操作です。 Java では、画像は次の式で 2 値化できます:

if (グレー > しきい値) {
binary = 255;
} else {
binary = 0;
}

以下は画像二値化のサンプルコードです:

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageBinarizationExample {

  public static void main(String[] args) throws IOException {
    // 读取图像
    File file = new File("image.jpg");
    BufferedImage image = ImageIO.read(file);
    // 灰度化图像
    int width = image.getWidth();
    int height = image.getHeight();
    BufferedImage grayscaleImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D g2d = grayscaleImage.createGraphics();
    g2d.drawImage(image, 0, 0, null);
    g2d.dispose();
    // 二值化图像
    int threshold = 128;
    BufferedImage binaryImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);
    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++) {
        int gray = grayscaleImage.getRGB(x, y) & 0xFF;
        int binary = 0;
        if (gray > threshold) {
          binary = 255;
        }
        binaryImage.setRGB(x, y, binary);
      }
    }
    // 显示图像
    ImageViewer viewer = new ImageViewer(binaryImage);
    viewer.show();
  }

}

上記のコードでは、まずカラー画像がグレースケール画像に変換され、次にグレースケール画像が黒画像に変換されます。しきい値を設定して白画像を表示します。ループ内では、getRGB() メソッドを使用して各ピクセルのグレースケール値を取得し、setRGB() メソッドを使用してバイナリ イメージのピクセルを 0 または 255 に設定できます。

6. 画像フィルタリング

画像フィルタリングは、画像を畳み込むことによって実現されます。 Java では、Kernel クラスを使用してコンボリューション カーネルを作成し、ConvolveOp クラスを使用してコンボリューション カーネルを画像に適用します。

以下は画像フィルタリングのサンプル コードです:

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageFilteringExample {

  public static void main(String[] args) throws IOException {
    // 读取图像
    File file = new File("image.jpg");
    BufferedImage image = ImageIO.read(file);
    // 定义卷积核
    float[] kernelData = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
    Kernel kernel = new Kernel(3, 3, kernelData);
    // 滤波图像
    int width = image.getWidth();
    int height = image.getHeight();
    BufferedImage filteredImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = filteredImage.createGraphics();
    ConvolveOp op = new ConvolveOp(kernel);
    op.filter(image, filteredImage);
    g2d.drawImage(filteredImage, 0, 0, null);
    g2d.dispose();
    // 显示图像
    ImageViewer viewer = new ImageViewer(filteredImage);
    viewer.show();
  }

}

上記のコードでは、まずカーネル オブジェクトを作成し、そのデータを [-1, -1, -1, -1 に設定します。 , 9, -1, -1, -1, -1]、3x3 コンボリューション カーネルを表します。次に、ConvolveOp クラスを使用して、コンボリューション カーネルが画像に適用されます。フィルタリング プロセス中に、setRGB() メソッドを使用して、畳み込みピクセル データをフィルタリングされたイメージに書き込むことができます。

概要

この記事では、画像の読み取りと表示、画像の拡大縮小、画像の回転、画像のグレースケール、画像の二値化、画像のフィルタリングなど、Java での画像処理の基本操作を紹介します。 Java には、さまざまな画像処理操作を簡単に実装できる画像処理クラスとメソッドが豊富に用意されています。読者は自分のニーズに応じて画像処理技術をさらに学習し、実際のアプリケーションでより豊富な機能を実装できます。

以上が画像処理の基本操作をJavaで実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。