Heim  >  Artikel  >  Java  >  Implementieren Sie grundlegende Operationen der Bildverarbeitung mit Java

Implementieren Sie grundlegende Operationen der Bildverarbeitung mit Java

WBOY
WBOYOriginal
2023-06-18 16:58:221876Durchsuche

Mit der Entwicklung der digitalen Technologie hat die Bildverarbeitungstechnologie immer mehr Aufmerksamkeit erhalten. In der Bildverarbeitung ist die Java-Sprache aufgrund ihrer Einfachheit, leichten Erlernbarkeit und plattformübergreifenden Funktionen beliebt. In diesem Artikel werden die grundlegenden Vorgänge der Bildverarbeitung in Java vorgestellt.

1. Bilder lesen und anzeigen

In Java können Bilder mit der Klasse javax.imageio.ImageIO gelesen und geladen werden. ImageIO bietet die statische Methode read(), die in Dateien, URLs oder Eingabestreams gespeicherte Bilder lesen und in Java BufferedImage-Objekte konvertieren kann.

Das Folgende ist ein Beispielcode zum Lesen und Anzeigen eines Bildes:

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();
  }

}

Unter diesen ist ImageViewer eine benutzerdefinierte Bildbetrachterklasse, die BufferedImage-Objekte im Fenster anzeigen kann. Ich werde hier nicht auf Details eingehen, die Leser können es selbst implementieren.

2. Bildskalierung

Bildskalierung ist einer der grundlegendsten Vorgänge in der Bildverarbeitung. Java stellt die Klasse AffineTransform zur Implementierung der Bildskalierung bereit. Bei der Skalierung müssen Sie den Skalierungsfaktor angeben, also das Skalierungsverhältnis in horizontaler und vertikaler Richtung.

Das Folgende ist ein Beispielcode für die Bildskalierung:

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();
  }

}

Erstellen Sie im obigen Code ein BufferedImage-Objekt, geben Sie dessen Breite und Höhe an und zeichnen Sie dann das skalierte Bild über die Methode drawRenderedImage() des Graphics2D-Objekts. Die getScaleInstance()-Methode der AffineTransform-Klasse gibt ein AffineTransform-Objekt zurück, das die angegebenen horizontalen und vertikalen Skalierungsfaktoren implementiert.

3. Bildrotation

Mit der AffineTransform-Klasse in Java können auch Bildrotationsoperationen durchgeführt werden. Beim Drehen müssen Sie den Drehwinkel und den Drehmittelpunkt angeben.

Das Folgende ist ein Beispielcode für die Bilddrehung:

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();
  }

}

Erstellen Sie im obigen Code ein BufferedImage-Objekt, geben Sie dessen Breite und Höhe an und zeichnen Sie dann das gedrehte Bild über die Methode drawRenderedImage() des Graphics2D-Objekts. Die Methoden „translate()“ und „rotate()“ der AffineTransform-Klasse implementieren Rotationsoperationen. Die Methode „translate()“ wird zum Verschieben des Mittelpunkts des Bildes und die Methode „rotate()“ zum Drehen des Bildes verwendet.

4. Bild-Graustufen

Bild-Graustufen ist der Vorgang, bei dem ein Farbbild in ein Graustufenbild umgewandelt wird. In Java kann das Bild mit der folgenden Formel grauskaliert werden:

Grau = 0,299 Rot + 0,587 Grün + 0,114 * Blau

Das Folgende ist ein Beispielcode für ein Graustufenbild:

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();
  }

}

Erstellen Sie im obigen Code ein BufferedImage-Objekt und geben Sie seinen Typ als TYPE_BYTE_GRAY an und konvertieren Sie dann das Farbbild über die Methode drawImage() des Graphics2D-Objekts in ein Graustufenbild.

5. Bildbinarisierung

Bildbinarisierung ist der Vorgang der Konvertierung von Graustufenbildern in Schwarzweißbilder. In Java kann das Bild durch die folgende Formel binarisiert werden:

if (grau > Schwellenwert) {
binär = 255;
} sonst {
binär = 0;
}

Das Folgende ist ein Beispielcode für die Bildbinarisierung :

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();
  }

}

Im obigen Code wird das Farbbild zuerst in ein Graustufenbild umgewandelt und dann wird das Graustufenbild durch Festlegen eines Schwellenwerts in ein Schwarzweißbild umgewandelt. In der Schleife können Sie die Methode getRGB() verwenden, um den Graustufenwert jedes Pixels abzurufen, und die Methode setRGB() verwenden, um die Pixel des Binärbilds auf 0 oder 255 zu setzen.

6. Bildfilterung

Bildfilterung wird durch Falten des Bildes erreicht. In Java wird die Kernel-Klasse zum Erstellen eines Faltungskerns und die ConvolveOp-Klasse zum Anwenden des Faltungskerns auf das Bild verwendet.

Das Folgende ist ein Beispielcode für die Bildfilterung:

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();
  }

}

Erstellen Sie im obigen Code zunächst ein Kernel-Objekt und setzen Sie seine Daten auf [-1, -1, -1, -1, 9, -1, -1 , -1, -1] stellt einen 3x3-Faltungskern dar. Der Faltungskern wird dann mithilfe der ConvolveOp-Klasse auf das Bild angewendet. Während des Filtervorgangs können Sie die Methode setRGB() verwenden, um die gefalteten Pixeldaten in das gefilterte Bild zu schreiben.

Zusammenfassung

In diesem Artikel werden die grundlegenden Vorgänge der Bildverarbeitung in Java vorgestellt, einschließlich Lesen und Anzeigen von Bildern, Bildskalierung, Bildrotation, Bildgraustufen, Bildbinarisierung und Bildfilterung. Java bietet eine Fülle von Bildverarbeitungsklassen und -methoden, mit denen sich verschiedene Bildverarbeitungsvorgänge problemlos implementieren lassen. Leser können die Bildverarbeitungstechnologie entsprechend ihren eigenen Bedürfnissen weiter studieren und umfangreichere Funktionen in praktische Anwendungen implementieren.

Das obige ist der detaillierte Inhalt vonImplementieren Sie grundlegende Operationen der Bildverarbeitung mit Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn