Affiche le résultat du traitement d'OpenCV sur l'interface graphique en utilisant Swing.
Il s'agit d'une boîte à outils Java GUI et d'une extension d'AWT. L'interface graphique créée par Swing dessine avec son propre composant GUI sans s'appuyer sur le composant OS. L'avantage est qu'il peut être utilisé quel que soit l'environnement d'exécution. L'inconvénient est que le processus de fonctionnement est lent car il ne s'agit plus d'un composant du système d'exploitation.
BufferedImage est utilisé dans cet article pour afficher l'image sur le type Swing from Mat. BudderedImage est des données d'image avec un tampon accessible et se compose de ColorModel et Raster. Le nombre et le type de bandes dans le SampleModel de Raster doivent correspondre au nombre et au type requis pour que le ColorModel représente sa couleur et sa valeur alpha. Les coordonnées (0,0) sont dans le coin supérieur gauche. Par conséquent, Raster doit être minX = 0, minY = 0.
Présentez ce qui suit: ・ Environnement de développement Java ・ OpenCV3.1
Si vous le recherchez, vous verrez différentes pages d'explications en japonais, je vais donc l'omettre.
La partie traitement est la suivante.
Mat2Image
public static BufferedImage Mat2Image(Mat src) {
//Obtenez le nombre de canaux dans 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;
}
//Créez un nouveau type BufferedImage avec la largeur, la longueur et le nombre de canaux src.
BufferedImage image = new BufferedImage(src.width(), src.height(), type);
//Extraire le raster de la BufferedImage créée.
WritableRaster raster = image.getRaster();
//Extrayez le tampon du raster extrait.
DataBufferByte Buf = (DataBufferByte) raster.getDataBuffer();
byte[] data = Buf.getData();
src.get(0, 0, data);
return image;
}
Si vous appelez ceci et mettez .setIcon dans le libellé de Swing, il sera affiché.
SetIcon
lblNewLabel = new JLabel();
ImageIcon image = new ImageIcon(createAwtImage(src));
lblNewLabel.setIcon(image);
J'ai pu afficher l'image de type Mat lue par Imread sur l'interface graphique en toute sécurité.
La source de l'interface graphique d'affichage d'image créée cette fois est ici. https://github.com/JackdMasaki/Mad2Image/blob/master/Mat2Imagetest.java
J'ai fait référence à la page suivante lors de la création de cet article. Je suis profondément reconnaissant. 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