[OpenCV] OpenCV de presentación de clase Mat

Mat clase introdujo en OPENCV

Perfil 1. Mat Clase

clase Mat es una estructura de datos de imagen muy común almacenada OPENCV. Mat clase de almacenamiento de contenedores puede ser vista como una matriz, que contiene dos partes, que se utilizan para almacenar la información de cabecera de imagen, y un puntero que apunta a las imágenes de matriz almacenados. Información a menudo espacio de cabeza es relativamente pequeña, y el jefe de información entre cada imagen es completamente independiente. La matriz de la imagen a menudo ocupan un gran espacio de almacenamiento, y el puntero de matriz puede apuntar a la misma imagen de una pluralidad de espacio de memoria.

2. Copia de clase Mat

estructura Mat desde un punto de clases de vista de almacenamiento de datos, memoria de imagen puntero clase Mat es implementada por una matriz. En este caso, un problema al hacer la copia de una imagen cuando es necesario tener en cuenta es: tenemos que copiar el puntero de dirección es una matriz, o la necesidad de volver a crear una memoria, la matriz de memoria de imagen a re-copia. Por lo tanto la clase Mat tener una copia superficial de copiar y copia completa de dos tipos.

constructor de copia 2.1 copia

Mat clase tiene su propio constructor de copia, que sigue el prototipo de función

Mat(const Mat& m);

Copia mediante el constructor de copia, hay dos escritura de la imagen, y escribir los dos son equivalentes.

Mat m = imread("1.jpg);
Mat m1 = m;
Mat m2(m);

Utilizando el constructor de copia superficial copia es una copia de la imagen, como resultado, M1 y M2 no tienen su propio almacenamiento de imágenes independientes, sino a su puntero de matriz para la dirección de puntero m. Por lo tanto, cuando tenemos que operar m, m1, también se verán afectados m2 tres fotos de una de las otras dos imágenes, el siguiente código de prueba:

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;

int main()
{

	//创建了Mat类型的变量m,并且通过拷贝构造的方法拷贝到了变量m1和m2
	Mat m = imread("a.jpg");
	Mat m1 = m;
	Mat m2(m);

	//创建了矩阵r和向量s,用于在图m1上绘图
	Rect r(0, 0, 300, 300);
	Scalar s(255, 0, 255);
	rectangle(m1, r, s);

	//显示所有的三张图片
	imshow("m", m);
	imshow("m1", m1);
	imshow("m2", m2);

	waitKey(0);
	return 0;
}

Los resultados son los siguientes:
Aquí Insertar imagen Descripción

2,2 clone () la función o la función copyTo () para copiar

El uso de estos dos métodos de copia es una copia completa de la imagen se genera la matriz de almacenamiento de imágenes independiente, y los datos de imagen original no es común, en cuyo caso, una sola operación, el otro no se ve afectada, la desventaja es el gran espacio y más lento.

Redactado como sigue:

Mat m = imread("a.jpg");
Mat m1;
m.copyTo(m1);
Mat m2=m.clone();

Código de ensayo:

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;

int main()
{

	//创建了Mat类型的变量m,并且拷贝到了变量m1和m2
	Mat m = imread("a.jpg");
	Mat m1;
	m.copyTo(m1);
	Mat m2=m.clone();
	

	//创建了矩阵r和向量s,用于在图m1上绘图
	Rect r(0, 0, 300, 300);
	Scalar s(255, 0, 255);
	rectangle(m, r, s);

	//显示所有的三张图片
	imshow("m", m);
	imshow("m1", m1);
	imshow("m2", m2);

	waitKey(0);
	return 0;
}

Aquí Insertar imagen Descripción

clase 3.Mat para crear una matriz

Dado que la estera de Clase A en sí Matrix es un tipo de tratamiento, puede ser creado a través de la clase matriz MAT

3.1Mat clase para crear una matriz de dos dimensiones

Mat clase utilizando el constructor es

Hay muchos constructor de la clase Mat se utiliza para crear la configuración de la matriz, y dado la asignación, Esto introduce una distancia, que se define como una función

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

Este constructor toma cuatro parámetros, que se caracteriza por la capacidad de definir una estructura de matriz y capaces de impartir inicial

El primer parámetro indica el número de filas en la matriz
el segundo argumento indica el número de columnas de la matriz de
la tercera parámetro indica el tipo de datos almacenados en una matriz, que tiene la CV_ formato [bits de] [con o sin signo] [Tipo de datos] [número de canal], como

CV_8UC3 //表示存储数据为8位无符号char类型,并且具有三个通道

El cuarto parámetro es una variable de tipo vectorial, puede dar matriz de inicialización, este vector tiene hasta cuatro dimensiones.

Ejemplo de uso:

Mat m(3, 3, CV_8UC3, Scalar(100, 10, 0));

Aquí Insertar imagen Descripción

Crear una matriz utilizando la función de miembro de crear

Crear una matriz usando este método para abrir sólo un recuerdo, pero no puede inicialización

Mat m;
m.create(3, 3, CV_8UC3);

MATLAB tipo de matriz para crear

clase Mat tiene función de tres estática del ojo (), ceros (), los () para crear una matriz con el mismo nombre en el MATLAB uso de función similar
, debido a que es funciones estáticas, para que puedan ser separados de los ejemplos específicos del objeto existe, llamados cuando es precedido por el nombre pertenece a la clase llamada, se utiliza de la siguiente manera

	Mat E = Mat::eye(4, 4, CV_32F);
	Mat Z = Mat::zeros(4, 4, CV_32F);
	Mat O = Mat::ones(4, 4, CV_32F);

salida:

Crear una matriz, separados por comas

Si la matriz es relativamente pequeña, se pueden introducir de esta manera, algo similar a la forma en que cada número que entró

Mat C =(Mat_<double>(3,3)<<1,1,1,1,1,1,1,1,1);

3.2Mat clase para crear una matriz multidimensional

Además clase Mat a la creación de matriz de dos dimensiones como en el ejemplo anterior, también se pueden crear mediante la definición de una dimensión de un método de la matriz multidimensional, esta función de configuración se define como sigue:

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

El primer parámetro es la dimensión de la matriz, tales como escribir una matriz tridimensional representa
un segundo parámetro es un puntero de tipo int, datos que representan la longitud de cada dimensión es el número de
la tercera parámetro indica el tipo de datos almacenados es lo que
el cuarto parámetro utilizado para impartir un valor inicial

Utilice la siguiente manera:

int size[3]={3,3,3};
Mat(3,size,CV_8UC3,Scalar::all(0));

4.Mat clase de salida con formato

clase de salida con formato Mat se limita a una matriz de dos dimensiones. O bien, el uso de cout tipos Mat salida de las variables, sólo dos dimensiones. Aquí sólo algunos ejemplos.

4.1 El formato predeterminado

Mat m=Mat::zeros(5,5,CV_64F);
cout<<m<<endl;

Aquí Insertar imagen Descripción

4.2 Formato de pitón

Mat m = Mat::zeros(5, 5, CV_64F);
cout << format(m,Formatter::FMT_PYTHON)<< endl<<endl;

Aquí Insertar imagen Descripción

4.3 formato de lenguaje C

Mat m = Mat::zeros(5, 5, CV_64F);
cout << format(m, Formatter::FMT_C) << endl << endl;

Aquí Insertar imagen Descripción

4.4 Formato de numpy

Mat m = Mat::zeros(5, 5, CV_64F);
cout << format(m, Formatter::FMT_NUMPY) << endl<<endl;

Aquí Insertar imagen Descripción

Publicado 14 artículos originales · ganado elogios 1 · visitas 504

Supongo que te gusta

Origin blog.csdn.net/qq_41741344/article/details/104341760
Recomendado
Clasificación