Mat构造函数
Mat();
Mat(int rows, int cols, int type);
rows:被创建数组的行数;
cols:被创建数组的列数;
type:被创建数组的类型,CV_8UC(n), …, CV_64FC(n)创建多通道数组,其中8表示每个通道占8位,U表示无符号,C表示char类型,n表示通道数目为n;
Mat(Size size, int type);
size:Size:size(cols, rows)代替矩阵尺寸;
Mat(int rows, int cols, int type, const Scalar& s);
s:向量,表示自己选择值来初始化每个像素值,向量长度对应通道数目;
Mat(Size size, int type, const Scalar& s);
Mat拷贝构造函数
Mat A = imread(imagePath);
Mat B(A);
拷贝构造函数属于部分复制,一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分。
Mat::copyTo(Mat mat)和Mat::clone()
Mat A ,B,C;
A = imread(imagePath);
B = A.clone();
A.copyTo(C);
这两个函数属于完全复制,Mat对象的头和数据部分一起复制。
Mar::rows
作用:返回矩阵的行数
应用:
Mat object;
int rows = object.rows;
Mar::cols
作用:返回矩阵列数
应用:
Mat object;
int cols= object.cols;
Mar::size()
作用:返回矩阵大小
应用:
Mat object;
int size= object.size();
Mar::type()
作用:返回矩阵元素类型;比如CV_16SC3 or 16-bit signed 3-channel array
应用:
Mat object;
int size= object.size();
Mar::channels()
作用:返回矩阵通道的数目
应用:
Mat object;
int size= object.channels();
Mar::depth()
作用:返回矩阵元素深度的标识符,即每个通道的类型;比如a 16-bit signed element array, the method returns CV_16S
一个完整的矩阵类型列表包含以下值:
- CV_8U - 8-bit unsigned integers ( 0…255 )
- CV_8S - 8-bit signed integers ( -128…127 )
- CV_16U - 16-bit unsigned integers ( 0…65535 )
- CV_16S - 16-bit signed integers ( -32768…32767 )
- CV_32S - 32-bit signed integers ( -2147483648…2147483647 )
- CV_32F - 32-bit floating-point numbers ( -FLT_MAX…FLT_MAX, INF, NAN )
- CV_64F - 64-bit floating-point numbers ( -DBL_MAX…DBL_MAX, INF, NAN )
应用:
Mat object;
int size = object.size();
Mar::isContinuous()
作用:如果矩阵元素连续存储就返回真
应用:
Mat object;
if( object.isContinuous() )
{
}
Mar::isSubmatrix()
作用:如果一个矩阵是另一个矩阵的子矩阵就返回真
Mar::total()
作用:返回数组元素的总数
Mar::total(int startDim, int endDim=INT_MAX)
作用:返回某个子数组元素的总数
Mar::empty()
作用:如果矩阵没有元素就返回真
原型解释:
The method returns true if Mat::total() is 0 or if Mat::data is NULL. Because of pop_back() and
resize() methods `M.total() == 0` does not imply that `M.data == NULL`.
Mar::zeros()
作用:零数组初始化器,即矩阵所有元素为0
函数原型
static MatExpr zeros(int rows, int cols, int type); //rows:矩阵的行; cols:矩阵的列; type:矩阵的类型
static MatExpr zeros(Size size, int type); //Size:size(cols, rows)代替矩阵尺寸; type:矩阵的类型
static MatExpr zeros(int ndims, const int* sz, int type); //ndims:数组维数; sz:指定数组形状的整数数组
应用:
Mat src,object;
object = Mat::zeros(src.size(), src.type());
指针
uchar* ptr(int i0=0);
i0:表示数组的行索引;
uchar* ptr(int row, int col);
template const _Tp* ptr(int i0=0) const;
template const _Tp* ptr(int row, int col) const;
Mar::at()函数
作用:获取数组元素
1、获取灰度图像的像素
用法:
Mat src;
src = imread(imageFilePath);
int element = src.at<int/char>(row, col);//提取像素值
src.at<int/char>(row, col) = 125;//改变像素值
2、获取彩色图像的像素
用法:
Mat src;
src = imread(imageFilePath);
int blue= src.at<Vec3b>(row, col)[0];//提取蓝通道的像素值
int green= src.at<Vec3b>(row, col)[1];//提取绿通道的像素值
int red= src.at<Vec3b>(row, col)[2];//提取红通道的像素值
Vec3b表示三通道uchar型;
Vec3s表示三通道short型;
Vec3w表示三通道ushort型;
Vec3i表示三通道int型;
Vec3f表示三通道float型;
Vec3d表示三通道double型;