[JAVA] Zeigen Sie mit Swing ein Bild vom Typ Mat auf der GUI an

Überblick

Lassen Sie uns das Verarbeitungsergebnis von OpenCV auf der GUI mit Swing anzeigen.

Was ist Swing?

Es ist ein Java GUI Toolkit und eine Erweiterung von AWT. Die von Swing erstellte GUI zeichnet mit einer eigenen GUI-Komponente, ohne sich auf die Betriebssystemkomponente zu verlassen. Der Vorteil ist, dass es unabhängig von der Ausführungsumgebung verwendet werden kann. Der Nachteil ist, dass der Betriebsprozess langsam ist, da er keine Betriebssystemkomponente mehr ist.

Umgang mit Bildern in Swing

BufferedImage wird in diesem Dokument verwendet, um das Bild auf dem Typ Swing from Mat anzuzeigen. BudderedImage besteht aus Bilddaten mit einem zugänglichen Puffer und besteht aus ColorModel und Raster. Die Anzahl und der Typ der Bänder in Rasters SampleModel müssen mit der Anzahl und dem Typ übereinstimmen, die das ColorModel benötigt, um seine Farbe und seinen Alpha-Wert darzustellen. Die (0,0) -Koordinaten befinden sich in der oberen linken Ecke. Daher muss Raster minX = 0, minY = 0 sein.

Vorbereitungsphase

Stellen Sie Folgendes vor: ・ Java-Entwicklungsumgebung ・ OpenCV3.1

Wenn Sie es nachschlagen, werden Sie verschiedene Erklärungsseiten auf Japanisch sehen, also werde ich es weglassen.

Methode zur Implementierung

Der Verarbeitungsteil ist wie folgt.

Mat2Image


public static BufferedImage Mat2Image(Mat src) {

//Holen Sie sich die Anzahl der Kanäle in Mat src
	    int type = 0;
	    if (src.channels() == 1) {
	        type = BufferedImage.TYPE_BYTE_GRAY;
	    } else if (src.channels() == 3) {
	        type = BufferedImage.TYPE_3BYTE_BGR;
	    } else {
	        return null;
	    }
//Erstellen Sie einen neuen BufferedImage-Typ mit src-Breite, Länge und Anzahl der Kanäle.
	    BufferedImage image = new BufferedImage(src.width(), src.height(), type);
//Extrahieren Sie das Raster aus dem erstellten BufferedImage.
      WritableRaster raster = image.getRaster();
//Extrahieren Sie den Puffer aus dem extrahierten Raster.
	    DataBufferByte Buf = (DataBufferByte) raster.getDataBuffer();
	    byte[] data = Buf.getData();
	    src.get(0, 0, data);

	    return image;
	}

Wenn Sie dies aufrufen und .setIcon in das Label of Swing einfügen, wird es angezeigt.

SetIcon


    lblNewLabel = new JLabel();
    ImageIcon image = new ImageIcon(createAwtImage(src));
    lblNewLabel.setIcon(image);

Ausführungsergebnis

lena.png

Ich konnte das von Imread gelesene Bild vom Typ Mat sicher auf der GUI anzeigen.

Codeverteilung

Die Quelle der diesmal erstellten GUI für die Bildanzeige ist hier. https://github.com/JackdMasaki/Mad2Image/blob/master/Mat2Imagetest.java

Referenz

Ich habe beim Erstellen dieses Artikels auf die folgende Seite verwiesen. Ich bin zutiefst dankbar. http://answers.opencv.org/question/10344/opencv-java-load-image-to-gui/ https://docs.oracle.com/javase/8/docs/api/index.html?java/awt/image/BufferedImage.html

Recommended Posts

Zeigen Sie mit Swing ein Bild vom Typ Mat auf der GUI an
Zeigen Sie die ROS-Anwendung auf Docker mit der GUI auf der Hostseite an
Ich habe mit Swing eine GUI erstellt
Zeigen Sie Text über dem Bild an
Aktualisieren Sie das Container-Image mit KUSANAGI Runs on Docker
JavaFX8-Bildanzeige
Zeigen Sie die Liste in setDetails mit Federsicherheit auf dem Bildschirm an
Zeigen Sie Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an