Java DIP - Bildformkonvertierung
Die Form des Bildes kann mit OpenCV leicht geändert werden. Das Bild kann entweder gespiegelt, skaliert oder in eine der vier Richtungen gedreht werden.
Um die Form des Bildes zu ändern, lesen wir das Bild und konvertieren es in ein Mat-Objekt. Die Syntax ist unten angegeben -
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.
Ein Bild umdrehen
OpenCV erlaubt drei Arten von Flip-Codes, die unten beschrieben werden:
Sr.Nr. | Flip Code & Beschreibung |
---|---|
1 | 0 0 bedeutet, um die x-Achse zu drehen. |
2 | 1 1 bedeutet, um die y-Achse zu drehen. |
3 | -1 -1 bedeutet, um beide Achsen zu drehen. |
Wir übergeben den entsprechenden Flip-Code an die Methode flip() in dem CoreKlasse. Die Syntax ist unten angegeben -
Core.flip(source mat, destination mat1, flip_code);
Die Methode flip() Es werden drei Parameter verwendet - die Quellbildmatrix, die Zielbildmatrix und der Flipcode.
Neben der Flip-Methode gibt es noch andere Methoden, die von der Core-Klasse bereitgestellt werden. Sie werden kurz beschrieben -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | add(Mat src1, Mat src2, Mat dst) Es berechnet die Summe pro Element aus zwei Arrays oder einem Array und einem Skalar. |
2 | bitwise_and(Mat src1, Mat src2, Mat dst) Es berechnet die bitweise Verbindung von zwei Arrays oder einem Array und einem Skalar pro Element. |
3 | bitwise_not(Mat src, Mat dst) Es invertiert jedes Bit eines Arrays. |
4 | circle(Mat img, Point center, int radius, Scalar color) Es zeichnet einen Kreis. |
5 | sumElems(Mat src) Es verwischt ein Bild mit einem Gaußschen Filter. |
6 | subtract(Mat src1, Scalar src2, Mat dst, Mat mask) Es berechnet die Differenz pro Element zwischen zwei Arrays oder Arrays und einem Skalar. |
Beispiel
Das folgende Beispiel zeigt die Verwendung der Core-Klasse zum Umdrehen eines Bildes.
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.File;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class Main {
public static void main( String[] args ) {
try {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
byte[] data = ((DataBufferByte) image.getRaster(). getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC3);
mat.put(0, 0, data);
Mat mat1 = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC3);
Core.flip(mat, mat1, -1);
byte[] data1 = new byte[mat1.rows()*mat1.cols()*(int)(mat1.elemSize())];
mat1.get(0, 0, data1);
BufferedImage image1 = new BufferedImage(mat1.cols(), mat1.rows(), 5);
image1.getRaster().setDataElements(0,0,mat1.cols(),mat1.rows(),data1);
File ouptut = new File("hsv.jpg");
ImageIO.write(image1, "jpg", ouptut);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Ausgabe
Wenn Sie das obige Beispiel ausführen, wird ein Bildname umgedreht digital_image_processing.jpg auf das entsprechende HSV-Farbraumbild und schreiben Sie es mit Namen auf die Festplatte flip.jpg.