OpenCV - Memorizzazione di immagini
Per catturare un'immagine, utilizziamo dispositivi come fotocamere e scanner. Questi dispositivi registrano i valori numerici dell'immagine (Es: valori dei pixel). OpenCV è una libreria che elabora le immagini digitali, quindi abbiamo bisogno di memorizzare queste immagini per l'elaborazione.
Il Matclasse della libreria OpenCV viene utilizzata per memorizzare i valori di un'immagine. Rappresenta un array n-dimensionale e viene utilizzato per memorizzare dati immagine di immagini in scala di grigi oa colori, volumi voxel, campi vettoriali, nuvole di punti, tensori, istogrammi, ecc.
Questa classe comprende due parti di dati: il header e a pointer
Header - Contiene informazioni come le dimensioni, il metodo utilizzato per la memorizzazione e l'indirizzo della matrice (dimensione costante).
Pointer - Memorizza i valori dei pixel dell'immagine (continua a variare).
La classe Mat
La libreria Java OpenCV fornisce questa classe con lo stesso nome (Mat) all'interno della confezione org.opencv.core.
Costruttori
La classe Mat della libreria Java OpenCV ha vari costruttori, utilizzando i quali è possibile costruire l'oggetto Mat.
S.No | Costruttori e descrizione |
---|---|
1 | Mat() Questo è il costruttore predefinito senza parametri nella maggior parte dei casi. Lo usiamo per il costruttore per creare una matrice vuota e passarlo ad altri metodi OpenCV. |
2 | Mat(int rows, int cols, int type) Questo costruttore accetta tre parametri di tipo intero che rappresentano il numero di righe e colonne in un array 2D e il tipo di array (che deve essere utilizzato per memorizzare i dati). |
3 | Mat(int rows, int cols, int type, Scalar s) Includendo i parametri del precedente, questo costruttore accetta anche un oggetto della classe Scalar come parametro. |
4 | Mat(Size size, int type) Questo costruttore accetta due parametri, un oggetto che rappresenta la dimensione della matrice e un numero intero che rappresenta il tipo di array utilizzato per memorizzare i dati. |
5 | Mat(Size size, int type, Scalar s) Includendo i parametri del precedente, questo costruttore accetta anche un oggetto della classe Scalar come parametro. |
6 | Mat(long addr) |
7 | Mat(Mat m, Range rowRange) Questo costruttore accetta un oggetto di un'altra matrice e un oggetto della classe Range che rappresenta l'intervallo delle righe da prendere per creare una nuova matrice. |
8 | Mat(Mat m, Range rowRange, Range colRange) Includendo i parametri del precedente, questo costruttore accetta anche un oggetto della classe. Intervallo che rappresenta l'intervallo di colonne. |
9 | Mat(Mat m, Rect roi) Questo costruttore accetta due oggetti, uno che rappresenta un'altra matrice e l'altro che rappresenta il file Region Of Iinteresse. |
Note -
Tipo di array. Usa CV_8UC1, ..., CV_64FC4 per creare matrici da 1-4 canali o CV_8UC (n), ..., CV_64FC (n) per creare matrici multicanale (fino a canali CV_CN_MAX).
Il tipo delle matrici era rappresentato da vari campi della classe CvType che appartiene al pacchetto org.opencv.core.
Metodi e descrizione
Di seguito sono riportati alcuni dei metodi forniti dalla classe Mat.
S.No | Metodi e descrizione |
---|---|
1 | Mat col(int x) Questo metodo accetta un parametro intero che rappresenta l'indice di una colonna e recupera e restituisce quella colonna. |
2 | Mat row(int y) Questo metodo accetta un parametro intero che rappresenta l'indice di una riga e recupera e restituisce quella riga. |
3 | int cols() Questo metodo restituisce il numero di colonne nella matrice. |
4 | int rows() Questo metodo restituisce il numero di righe nella matrice. |
5 | Mat setTo(Mat value) Questo metodo accetta un oggetto di Mat type e imposta gli elementi dell'array sul valore specificato. |
6 | Mat setTo(Scalar s) Questo metodo accetta un oggetto di Scalar type e imposta gli elementi dell'array sul valore specificato. |
Creazione e visualizzazione della matrice
In questa sezione, discuteremo il nostro primo esempio di OpenCV. Vedremo come creare e visualizzare una semplice matrice OpenCV.
Di seguito sono riportati i passaggi da seguire per creare e visualizzare una matrice in OpenCV.
Passaggio 1: carica la libreria nativa di OpenCV
Durante la scrittura del codice Java utilizzando la libreria OpenCV, il primo passo che devi fare è caricare la libreria nativa di OpenCV utilizzando il loadLibrary(). Carica la libreria nativa di OpenCV come mostrato di seguito.
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Passaggio 2: istanzia la classe Mat
Istanziare la classe Mat utilizzando una delle funzioni menzionate in questo capitolo in precedenza.
//Creating a matrix
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
Passaggio 3: riempire la matrice utilizzando i metodi
È possibile recuperare particolari righe / colonne di una matrice passando i valori di indice ai metodi row()/col().
Inoltre, puoi impostare i valori su questi utilizzando una qualsiasi delle varianti di setTo() metodi.
//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
È possibile utilizzare il seguente codice di programma per creare e visualizzare una semplice matrice in Java utilizzando la libreria 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());
}
}
Eseguendo il programma sopra, otterrai il seguente output:
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]
Caricamento dell'immagine utilizzando l'API JavaSE
Il BufferedImage classe di java.awt.image.BufferedImage pacchetto viene utilizzato per memorizzare un'immagine e il file ImageIO classe del pacchetto import javax.imageio fornisce metodi per leggere e scrivere immagini.
Example
È possibile utilizzare il seguente codice di programma per caricare e salvare le immagini utilizzando la libreria 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");
}
}
Eseguendo il programma sopra, otterrai il seguente output:
image Saved
Se apri il percorso specificato, puoi osservare l'immagine salvata come segue: