ホームページ Java &#&チュートリアル 画像処理の基本操作をJavaで実装する

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

Jun 18, 2023 pm 04:58 PM
java 画像処理 基本操作

デジタル技術の発展に伴い、画像処理技術がますます注目を集めています。画像処理では、そのシンプルさ、学習の容易さ、およびクロスプラットフォームの特性により、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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

See all articles