OpenCV - Stockage d'images

Pour capturer une image, nous utilisons des appareils tels que des appareils photo et des scanners. Ces appareils enregistrent les valeurs numériques de l'image (Ex: valeurs de pixels). OpenCV est une bibliothèque qui traite les images numériques, nous devons donc stocker ces images pour le traitement.

le MatLa classe de la bibliothèque OpenCV est utilisée pour stocker les valeurs d'une image. Il représente un tableau à n dimensions et est utilisé pour stocker des données d'image d'images en niveaux de gris ou en couleurs, des volumes de voxel, des champs vectoriels, des nuages ​​de points, des tenseurs, des histogrammes, etc.

Cette classe comprend deux parties de données: le header et un pointer

  • Header - Contient des informations telles que la taille, la méthode utilisée pour le stockage et l'adresse de la matrice (taille constante).

  • Pointer - Stocke les valeurs de pixel de l'image (continue à varier).

La classe Mat

La bibliothèque OpenCV Java fournit cette classe avec le même nom (Mat) dans le colis org.opencv.core.

Constructeurs

La classe Mat de la bibliothèque Java OpenCV a divers constructeurs, à l'aide desquels vous pouvez construire l'objet Mat.

S. Non Constructeurs et description
1

Mat()

Il s'agit du constructeur par défaut sans paramètres dans la plupart des cas. Nous utilisons ceci pour le constructeur pour créer une matrice vide et la passer à d'autres méthodes OpenCV.

2

Mat(int rows, int cols, int type)

Ce constructeur accepte trois paramètres de type entier représentant le nombre de lignes et de colonnes dans un tableau 2D et le type du tableau (qui doit être utilisé pour stocker les données).

3

Mat(int rows, int cols, int type, Scalar s)

En incluant les paramètres du précédent, ce constructeur accepte en plus un objet de la classe Scalar comme paramètre.

4

Mat(Size size, int type)

Ce constructeur accepte deux paramètres, un objet représentant la taille de la matrice et un entier représentant le type du tableau utilisé pour stocker les données.

5

Mat(Size size, int type, Scalar s)

En incluant les paramètres du précédent, ce constructeur accepte en plus un objet de la classe Scalar comme paramètre.

6

Mat(long addr)

sept

Mat(Mat m, Range rowRange)

Ce constructeur accepte un objet d'une autre matrice et un objet de la classe Range représentant la plage des lignes à prendre pour créer une nouvelle matrice.

8

Mat(Mat m, Range rowRange, Range colRange)

En incluant les paramètres du précédent, ce constructeur accepte en plus un objet de la classe. Plage représentant la plage de colonnes.

9

Mat(Mat m, Rect roi)

Ce constructeur accepte deux objets, l'un représentant une autre matrice et l'autre représentant le Region OF Iintérêt.

Note -

  • Type de tableau. Utilisez CV_8UC1, ..., CV_64FC4 pour créer des matrices de 1 à 4 canaux, ou CV_8UC (n), ..., CV_64FC (n) pour créer des matrices multicanaux (jusqu'aux canaux CV_CN_MAX).

  • Le type des matrices était représenté par différents champs de la classe CvType qui appartient au package org.opencv.core.

Méthodes et description

Voici quelques-unes des méthodes fournies par la classe Mat.

S. Non Méthodes et description
1

Mat col(int x)

Cette méthode accepte un paramètre entier représentant l'index d'une colonne et récupère et retourne cette colonne.

2

Mat row(int y)

Cette méthode accepte un paramètre entier représentant l'index d'une ligne et récupère et retourne cette ligne.

3

int cols()

Cette méthode renvoie le nombre de colonnes dans la matrice.

4

int rows()

Cette méthode renvoie le nombre de lignes dans la matrice.

5

Mat setTo(Mat value)

Cette méthode accepte un objet du Mat type et définit les éléments du tableau sur la valeur spécifiée.

6

Mat setTo(Scalar s)

Cette méthode accepte un objet du Scalar type et définit les éléments du tableau sur la valeur spécifiée.

Création et affichage de la matrice

Dans cette section, nous allons discuter de notre premier exemple OpenCV. Nous verrons comment créer et afficher une matrice OpenCV simple.

Vous trouverez ci-dessous les étapes à suivre pour créer et afficher une matrice dans OpenCV.

Étape 1: Chargez la bibliothèque native OpenCV

Lors de l'écriture de code Java à l'aide de la bibliothèque OpenCV, la première étape à faire est de charger la bibliothèque native d'OpenCV à l'aide du loadLibrary(). Chargez la bibliothèque native OpenCV comme indiqué ci-dessous.

//Loading the core library 
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Étape 2: instancier la classe Mat

Instanciez la classe Mat en utilisant l'une des fonctions mentionnées précédemment dans ce chapitre.

//Creating a matrix 
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));

Étape 3: Remplissez la matrice en utilisant les méthodes

Vous pouvez récupérer des lignes / colonnes particulières d'une matrice en passant des valeurs d'index aux méthodes row()/col().

Et, vous pouvez définir des valeurs à ces derniers en utilisant l'une des variantes du setTo() méthodes.

//Retrieving the row with index 0 
Mat row0 = matrix.row(0); 
     
//setting values of all elements in the row with index 0 
row0.setTo(new Scalar(1)); 
     
//Retrieving the row with index 3 
Mat col3 = matrix.col(3);  
     
//setting values of all elements in the row with index 3 
col3.setTo(new Scalar(3));

Example

Vous pouvez utiliser le code de programme suivant pour créer et afficher une matrice simple en Java à l'aide de la bibliothèque OpenCV.

import org.opencv.core.Core; 
import org.opencv.core.Mat;  
import org.opencv.core.CvType;  
import org.opencv.core.Scalar;   

class DisplayingMatrix { 
   public static void main(String[] args) {     
      //Loading the core library 
      System.loadLibrary(Core.NATIVE_LIBRARY_NAME);     

      //Creating a matrix 
      Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));  

      //Retrieving the row with index 0 
      Mat row0 = matrix.row(0);

      //setting values of all elements in the row with index 0 
      row0.setTo(new Scalar(1)); 

      //Retrieving the row with index 3 
      Mat col3 = matrix.col(3);  

      //setting values of all elements in the row with index 3 
      col3.setTo(new Scalar(3)); 

      //Printing the matrix 
      System.out.println("OpenCV Mat data:\n" + matrix.dump()); 
   } 
}

Lors de l'exécution du programme ci-dessus, vous obtiendrez la sortie suivante -

OpenCV Mat data: 
[  1,   1,   1,   3,   1; 
   0,   0,   0,   3,   0; 
   0,   0,   0,   3,   0; 
   0,   0,   0,   3,   0; 
   0,   0,   0,   3,   0]

Chargement d'une image à l'aide de l'API JavaSE

le BufferedImage classe de la java.awt.image.BufferedImage package est utilisé pour stocker une image et le ImageIO classe du package import javax.imageio fournit des méthodes pour lire et écrire des images.

Example

Vous pouvez utiliser le code de programme suivant pour charger et enregistrer des images à l'aide de la bibliothèque JavaSE.

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO;
  
public class LoadingImage_JSE_library {
   public static void main( String[] args ) throws IOException {
      //Input File 
      File input = new File("C:/EXAMPLES/OpenCV/sample.jpg");
          
      //Reading the image 
      BufferedImage image = ImageIO.read(input);
      
      //Saving the image with a different name
      File ouptut = new File("C:/OpenCV/sample.jpg");
      ImageIO.write(image, "jpg", ouptut);
         
      System.out.println("image Saved");
   } 
}

Lors de l'exécution du programme ci-dessus, vous obtiendrez la sortie suivante -

image Saved

Si vous ouvrez le chemin spécifié, vous pouvez observer l'image enregistrée comme suit -