suchen
HeimJavajavaLernprogrammImplementieren Sie grundlegende Operationen der Bildverarbeitung mit Java

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
Java -Cache -Datenverlust: Warum können Daten nicht aus dem Cache abgerufen werden?Java -Cache -Datenverlust: Warum können Daten nicht aus dem Cache abgerufen werden?Apr 19, 2025 pm 02:57 PM

Analyse- und Optimierungslösungen Aus dem Grund, warum Java -Cache -Daten nicht in Java -Projekten erhalten werden können, ist es üblich, große Datenmengen in den Speicher zu bringen, um schnellen Zugriff zu erhalten ...

Wenn Sie ein besserer Java -Entwickler werden möchten, in welchen Aspekten von JVM sind es am meisten wert?
oder
Java Advanced: Eingehende Forschung zu JVM, welche Kernmechanismen sind am meisten wert?Wenn Sie ein besserer Java -Entwickler werden möchten, in welchen Aspekten von JVM sind es am meisten wert? oder Java Advanced: Eingehende Forschung zu JVM, welche Kernmechanismen sind am meisten wert?Apr 19, 2025 pm 02:54 PM

Eingehende Java: Eine weltweite maschinelle Welt, die es wert ist, erkundet zu werden. Viele Java -Entwickler hoffen, ihre Technologie nach dem Beherrschen der grundlegenden Syntax und der häufig verwendeten Frameworks weiter zu verbessern ...

Wie kann ich das Problem des Datenüberschreibens und des Stilverlusts von zusammengeführten Zellen bei der Bevölkerung von Excel -Vorlagen mit Easyexcel lösen?Wie kann ich das Problem des Datenüberschreibens und des Stilverlusts von zusammengeführten Zellen bei der Bevölkerung von Excel -Vorlagen mit Easyexcel lösen?Apr 19, 2025 pm 02:51 PM

Häufige gestellte Fragen beim Füllen von zusammengefügten Zellen mit Easyexcel ...

Wie kann ich die Feldzuordnung im Systemdocken durch das Mapstruct -Tool effizient lösen?Wie kann ich die Feldzuordnung im Systemdocken durch das Mapstruct -Tool effizient lösen?Apr 19, 2025 pm 02:48 PM

Feldzuordnungsprobleme und Lösungen im Systemdocking. Während des Systemdockprozesses begegnen Sie häufig auf die Bedürfnisse, die Schnittstellenfelder eines Systems einem anderen zuzuordnen ...

Wie löste ich die Ausnahme 'PSQLEXception: Fehler: Stornierungsanweisung aufgrund der Benutzeranforderung' in Springboot -Anwendung?Wie löste ich die Ausnahme 'PSQLEXception: Fehler: Stornierungsanweisung aufgrund der Benutzeranforderung' in Springboot -Anwendung?Apr 19, 2025 pm 02:45 PM

In der Springboot -Anwendung wird PGJDBC Connection Pool PSQLEXception ausgelöst: Fehler: Die Ausnahme von DeckingStatementDuetouserRequest wird verwendet. Springboot mybatis-plus ...

Wie gestaltete ich einen Lotteriealgorithmus, um sicherzustellen, dass Sie kein Geld verlieren?Wie gestaltete ich einen Lotteriealgorithmus, um sicherzustellen, dass Sie kein Geld verlieren?Apr 19, 2025 pm 02:42 PM

Wie gestaltete ich einen Lotteriealgorithmus, um sicherzustellen, dass Sie kein Geld verlieren? Bei der Gestaltung eines Lotterieprodukts ist die Einstellung der Gewinnwahrscheinlichkeit jedes Preises eine wichtige Frage. Angenommen ...

Wie filtert und synchronisieren Sie Hotspot-Daten, um die Effizienz der großen Datensynchronisation zu verbessern?Wie filtert und synchronisieren Sie Hotspot-Daten, um die Effizienz der großen Datensynchronisation zu verbessern?Apr 19, 2025 pm 02:39 PM

Wie optimieren Sie die Filterung und Synchronisation von Hotspot -Daten? Bei der Umgang mit groß angelegten Datensynchronisation ist die effektive Filter von Hotspot-Daten zu einem zentralen Problem geworden. Angenommen, es gibt ...

Können virtuelle Threads und Multithreading -Parallele in der Java -Programmierung eine 'unbesiegbare' Parallelitätsleistung erzielen?Können virtuelle Threads und Multithreading -Parallele in der Java -Programmierung eine 'unbesiegbare' Parallelitätsleistung erzielen?Apr 19, 2025 pm 02:36 PM

Java Virtual Threading und Multithreading Parallel: Kompatibilitätsherausforderung bei der Java -Programmierung und die Einführung virtueller Threads bietet Entwicklern effizientere Verarbeitungsmethoden. � ...

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.