Lassen Sie uns das Verarbeitungsergebnis von OpenCV auf der GUI mit Swing anzeigen.
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.
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.
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.
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);
Ich konnte das von Imread gelesene Bild vom Typ Mat sicher auf der GUI anzeigen.
Die Quelle der diesmal erstellten GUI für die Bildanzeige ist hier. https://github.com/JackdMasaki/Mad2Image/blob/master/Mat2Imagetest.java
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