OpenCV - Almacenamiento de imágenes
Para capturar una imagen, utilizamos dispositivos como cámaras y escáneres. Estos dispositivos registran valores numéricos de la imagen (Ej .: valores de píxeles). OpenCV es una biblioteca que procesa las imágenes digitales, por lo tanto, necesitamos almacenar estas imágenes para su procesamiento.
los MatLa clase de biblioteca OpenCV se utiliza para almacenar los valores de una imagen. Representa una matriz n-dimensional y se utiliza para almacenar datos de imágenes en escala de grises o imágenes en color, volúmenes de vóxeles, campos vectoriales, nubes de puntos, tensores, histogramas, etc.
Esta clase consta de dos partes de datos: el header y un pointer
Header - Contiene información como el tamaño, el método utilizado para almacenar y la dirección de la matriz (tamaño constante).
Pointer - Almacena los valores de píxeles de la imagen (sigue variando).
La clase Mat
La biblioteca OpenCV Java proporciona esta clase con el mismo nombre (Mat) dentro del paquete org.opencv.core.
Constructores
La clase Mat de la biblioteca OpenCV Java tiene varios constructores, con los que puede construir el objeto Mat.
S. No | Constructores y descripción |
---|---|
1 |
Mat() Este es el constructor predeterminado sin parámetros en la mayoría de los casos. Usamos esto para el constructor para crear una matriz vacía y pasar esto a otros métodos OpenCV. |
2 |
Mat(int rows, int cols, int type) Este constructor acepta tres parámetros de tipo entero que representan el número de filas y columnas en una matriz 2D y el tipo de matriz (que se utilizará para almacenar datos). |
3 |
Mat(int rows, int cols, int type, Scalar s) Incluyendo los parámetros del anterior, este constructor acepta adicionalmente un objeto de la clase Scalar como parámetro. |
4 |
Mat(Size size, int type) Este constructor acepta dos parámetros, un objeto que representa el tamaño de la matriz y un número entero que representa el tipo de matriz utilizada para almacenar los datos. |
5 |
Mat(Size size, int type, Scalar s) Incluyendo los parámetros del anterior, este constructor acepta adicionalmente un objeto de la clase Scalar como parámetro. |
6 | Mat(long addr) |
7 |
Mat(Mat m, Range rowRange) Este constructor acepta un objeto de otra matriz y un objeto de la clase Range que representa el rango de las filas que se tomarán para crear una nueva matriz. |
8 |
Mat(Mat m, Range rowRange, Range colRange) Incluyendo los parámetros del anterior, este constructor acepta adicionalmente un objeto de la clase. Rango que representa el rango de la columna. |
9 |
Mat(Mat m, Rect roi) Este constructor acepta dos objetos, uno que representa otra matriz y el otro que representa la Region OF Iinterés. |
Note -
Tipo de matriz. Utilice CV_8UC1, ..., CV_64FC4 para crear matrices de 1-4 canales, o CV_8UC (n), ..., CV_64FC (n) para crear matrices multicanal (hasta canales CV_CN_MAX).
El tipo de matrices estuvo representado por varios campos de la clase. CvType que pertenece al paquete org.opencv.core.
Métodos y descripción
A continuación se muestran algunos de los métodos proporcionados por la clase Mat.
S. No | Métodos y descripción |
---|---|
1 |
Mat col(int x) Este método acepta un parámetro entero que representa el índice de una columna y recupera y devuelve esa columna. |
2 |
Mat row(int y) Este método acepta un parámetro entero que representa el índice de una fila y recupera y devuelve esa fila. |
3 |
int cols() Este método devuelve el número de columnas de la matriz. |
4 |
int rows() Este método devuelve el número de filas de la matriz. |
5 |
Mat setTo(Mat value) Este método acepta un objeto del Mat type y establece los elementos de la matriz en el valor especificado. |
6 |
Mat setTo(Scalar s) Este método acepta un objeto del Scalar type y establece los elementos de la matriz en el valor especificado. |
Creación y visualización de la matriz
En esta sección, vamos a discutir nuestro primer ejemplo de OpenCV. Veremos cómo crear y mostrar una matriz OpenCV simple.
A continuación se muestran los pasos a seguir para crear y mostrar una matriz en OpenCV.
Paso 1: Cargue la biblioteca nativa de OpenCV
Mientras escribe código Java usando la biblioteca OpenCV, el primer paso que debe hacer es cargar la biblioteca nativa de OpenCV usando el loadLibrary(). Cargue la biblioteca nativa de OpenCV como se muestra a continuación.
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Paso 2: crear una instancia de la clase Mat
Cree una instancia de la clase Mat usando cualquiera de las funciones mencionadas anteriormente en este capítulo.
//Creating a matrix
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
Paso 3: llene la matriz usando los métodos
Puede recuperar filas / columnas particulares de una matriz pasando valores de índice a los métodos row()/col().
Y puede establecer valores para estos utilizando cualquiera de las variantes del setTo() métodos.
//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
Puede usar el siguiente código de programa para crear y mostrar una matriz simple en Java usando la biblioteca 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());
}
}
Al ejecutar el programa anterior, obtendrá el siguiente resultado:
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]
Cargando imagen usando la API de JavaSE
los BufferedImage clase de la java.awt.image.BufferedImage El paquete se utiliza para almacenar una imagen y el ImageIO clase del paquete import javax.imageio proporciona métodos para leer y escribir imágenes.
Example
Puede utilizar el siguiente código de programa para cargar y guardar imágenes utilizando la biblioteca 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");
}
}
Al ejecutar el programa anterior, obtendrá el siguiente resultado:
image Saved
Si abre la ruta especificada, puede observar la imagen guardada de la siguiente manera: