Objeto Mat en estructura de datos de imagen Opencv

Prefacio

El objeto Mat es un objeto de memoria que está cargado o todo incluido, ¿qué es exactamente?

1. ¿Cuál es el objetivo?

Un objeto es una colección que puede tener propiedades y métodos.

2. ¿Cómo se ve el objeto Mat en la imagen?

A los ojos de la gente normal, él es una imagen,
a mis ojos, él es mi ídolo,
en la computadora, será analizado como una matriz bidimensional;

Inserte la descripción de la imagen aquí

2. ¿La fuente del objeto Mat?

¿Cómo dijimos que apareció la biblioteca Mat? En la versión de opencv1.ji, el procesamiento de imágenes se implementó usando la biblioteca IplImage (al estilo del lenguaje C), pero pronto apareció el problema de la fuga de memoria;
sobre esta base, se introdujo la versión de opencv2.ji para object- programación orientada, los objetos Mat son estructuras de datos en estilo C ++.

Tres, el constructor del objeto Mat:

1) Introduzca brevemente el constructor y el destructor:

      3.1.1 Definición de constructor: Constructor es un método especial . Se utiliza principalmente para inicializar el objeto cuando se crea, es decir, para asignar valores iniciales a las variables miembro del objeto.Siempre se utiliza con el operador nuevo en la declaración de creación del objeto. Una clase puede tener varios constructores, que se pueden distinguir según el número de sus parámetros o los tipos de parámetros.

      3.1.2 Definición de destructor: Destructor es lo opuesto a constructor.Cuando el objeto finaliza su ciclo de vida, como cuando la función del objeto ha sido llamada, el sistema ejecuta automáticamente el destructor. El destructor se usa a menudo para "limpiar las secuelas" (por ejemplo, use new para abrir un espacio de memoria al crear un objeto, y delete llamará automáticamente al destructor para liberar la memoria).

2) El constructor del objeto Mat:
      3.2.1. El constructor sin parámetros del objeto Mat:

Mat::Mat();
//生成一个矩阵并由OpenCV提供的函数(一般是Mat::create() 和 cv::imread() )来分配储存空间。
//Mat类可以分为两个部分:矩阵头和指向像素数据的矩阵指针

      Pasamos a la definición del método de construcción: puedes ver que el       significado del comentario en
Inserte la descripción de la imagen aquíchino es el siguiente:
      @param filas El número de filas en la matriz bidimensional.
      @param cols representa el número de columnas en la matriz bidimensional.
      @param type tipo de matriz. Utilice CV_8UC1, ..., CV_64FC4 para crear una matriz de 1-4 canales,
      o CV_8UC (n), ..., CV_64FC (n) para crear una matriz con múltiples canales (hasta CV_CN_MAX canales).

      3.2.2. El objeto Mat utiliza los constructores de fila (filas), columna (columnas) y tipo (tipo):

Mat::Mat(int rows, int cols, int type);

      3.2.3. El objeto Mat utiliza los constructores de tamaño y tipo:

Mat::Mat(Size size, int type);

      3.2.4. El objeto Mat usa fila (filas), columna (columnas), tipo (tipo) y constructores escalares escalares:

Mat::Mat(int rows, int cols, int type, const Scalar& s);

      3.2.5. El objeto Mat usa el tamaño, el tipo y el constructor escalar Scalar:

Mat::Mat(Size size, int type, const Scalar& s);

      3.2.6. El objeto Mat usa size para especificar la matriz entera y el constructor de tipo de la forma de matriz n-dimensional:

Mat::Mat(int ndims, const int* sizes, int type);
//ndims数组维数

      3.2.7. El objeto Mat usa la matriz de enteros dinámicos y el constructor de tipo especificado por tamaño:

Mat::Mat(const std::vector<int>& sizes, int type);
//vector,传入动态整数数组,在使用前,需导入#include <vector>

      3.2.8. El objeto Mat usa el tamaño para especificar la matriz de enteros, el tipo y el constructor de vector escalar de la forma de matriz n-dimensional:

Mat::Mat(int ndims, const int* sizes, int type, const Scalar& s);

      3.2.9. El objeto Mat asigna m al objeto recién creado, sin copiar los datos de la imagen, compartiendo los datos de la imagen, que pertenece al constructor de copia superficial:

Mat::Mat(const Mat& m);

      3.2.10. El objeto Mat usa los constructores para filas, columnas, tipo, punteros de datos y el número de bytes ocupados por filas de matriz:

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);

/*@param size 2D array size:大小(列、行)。在Size()构造函数中,行数和列数按相反顺序排列。
@param type数组类型。使用CV_8UC1,…,CV_64FC4创建1-4个通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(最多CV_CN_MAX通道)矩阵。
@param data指向用户数据的指针。接受数据和步长参数的矩阵构造函数不分配矩阵数据。相反,它们只是初始化指向指定数据,这意味着没有数据被复制。此操作非常有效,可用于使用OpenCV函数处理外部数据。外部数据不会自动释放,因此你应该照顾好它。
@param step每个矩阵行占用的字节数。该值应包括以下位置的填充字节:每行的末尾(如果有)。如果缺少参数(设置为AUTO\u STEP),则假定没有填充实际步长计算为cols*elemSize()。请参阅Mat::elemSize。
此构造函数不创建图像数据所需内存,而是直接使用data指针,图像的行步长由 step指定。
*/

      3.2.11. El objeto Mat utiliza el constructor de tamaño, tipo, puntero de datos y el número de bytes ocupados por filas de matriz:

Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP);

      3.2.12. El objeto Mat creará nuevamente una parte de m, el constructor del rango especificado por roi:

Mat::Mat(const Mat& m, const Rect& roi);

3) Estos son los distintos constructores que componen la matriz. Como se describe en Posicionamiento automático, normalmente el constructor predeterminado es suficiente y la función OpenCV asignará la matriz apropiada. La matriz construida se puede asignar además a otra matriz o expresión de matriz, o se puede asignar con Mat :: create. En el primer caso, se desreferencia el contenido antiguo.

4) Los métodos de construcción de tapetes más utilizados son los siguientes:

Mat::Mat();
Mat::Mat(int rows,int cols,int type);
Mat::Mat(Size size,int type ) ;
Mat::Mat(int ndims,const int *  sizes,int type,const Scalar& s) ;
Mat::Mat(const Mat & m);
//如有需要可自行学习其他构造函数

Cuatro, ejemplos de constructor de objetos Mat:

Bloque de código:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
    
    
	
	Mat src = imread("C:\\Users\\ASUS\\Desktop\\3.png");
	namedWindow("input_Image_Windows", WINDOW_AUTOSIZE);
	imshow("input_Image_Windows", src);

	//Mat dst = Mat();//无参数构造函数使用
	Mat dst = src;
	namedWindow("output_Image_Windows", WINDOW_AUTOSIZE);
	imshow("output_Image_Windows", dst);
	
	waitKey(0);
	return 0;
}

resultado de la operación:
Inserte la descripción de la imagen aquí

Cinco, la función miembro del objeto Mat:

1. La función clonar, que copia una matriz a otra matriz;
2. La función copyTo, que es similar a la anterior;
3. La función Create, que crea una nueva matriz;
4. La función convertTo, proporciona una función para convertir la matriz;
5. función de profundidad, que devuelve la profundidad de la imagen;
6. la función de canales, que devuelve el número de canales de imagen;
7. la función de tipo, que devuelve el tipo de matriz;
8. la función de ceros, que devuelve un matriz de 0;
se pueden buscar otras funciones por sí mismas y los métodos de uso no se introducen uno por uno.

para resumir

Como estructura de datos del procesamiento de imágenes, los objetos Mat son ricos en contenido y deben aprenderse. Después de usarlos, pasará tiempo aprendiendo. No es necesario dedicar tiempo a aprender, pero lo básico es comprender y usar .

¡Por favor corríjame si hay algún error!

Supongo que te gusta

Origin blog.csdn.net/ivan_9/article/details/113087688
Recomendado
Clasificación