当前位置:文档之家› OPenCV3.2中Mat对象常用函数属性总结

OPenCV3.2中Mat对象常用函数属性总结

OPenCV3.2中Mat对象常用函数属性总结Mat对象是OpenCV2.0之后引进的图像数据结构,它能自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。

分了两个部分,头部与数据部分。

在使用Mat对象时,有以下四个要点需要注意:
1、输出图像的内存是自动分配的
2、使用OpenCV的C++接口,不需要考虑内存分配问题
3、赋值操作和拷贝构造函数只会复制头部分
4、使用clone与copyTo两个函数实现数据完全复制
下面我们就具体介绍一下公共成员函数和公共属性。

公共成员函数:
1、cv::Mat::Mat ( int rows,
int cols,
int type
)
参数:
rows2D数组中的行数
cols2D数组中的列数。

type数组类型。

使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

2、cv::Mat::Mat ( Size size,
int type
)
参数:
size 2D数组大小:Size(cols, rows)。

在Size()构造函数中,行数和列数以相反的顺序排列。

type 数组类型。

使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

3、cv::Mat::Mat ( int rows,
int cols,
int type,
const Scalar & s
)
参数:
rows2D数组中的行数。

cols 2D数组中的列数。

type数组类型。

使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

s 初始化每个矩阵元素的可选值。

在构建后将所有矩阵元素设置为特定值, 使用赋值运算符Mat::operator=(const Scalar& value) 。

4、cv::Mat::Mat ( Size size,
int type,
const Scalar & s
)
参数:
size二维数组的大小: Size(cols, rows) .在Size()构造函数中,行数和列数以相反的顺序排列。

type 数组类型。

使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

s 初始化每个矩阵元素的可选值。

在构建后将所有矩阵元素设置为特定值,使用赋值操作符Mat::operator=(const Scalar& value) .
5、cv::Mat::Mat ( int ndims,
const int * sizes,
int type
)
参数:
ndims数组维数。

sizes 指定n维数组形状的整数数组。

type 数组类型。

使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

6、cv::Mat::Mat ( int ndims,
const int * sizes,
int type,
const Scalar & s
)
参数:
ndims数组维数。

sizes指定n维数组形状的整数数组。

type数组类型。

使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

s初始化每个矩阵元素的可选值。

在构建后将所有矩阵元素设置为特定值,使用赋值操作符Mat::operator=(const Scalar& value) .
7、cv::Mat::Mat ( const Mat & m )
参数:
m被分配给被构造的矩阵的数组(作为一个整体或部分)。

没有数据被这些构造函数复制。

而是指向m数据或它的子数组的头指针被构造并与之关联。

如果有引用计数器的话,计数器是递增的。

因此,当您使用这样的构造函数修改生成的矩阵时,您也会修改相应的m元素。

如果你想要一个独立的子数组拷贝,使用Mat::clone() .
8、cv::Mat::Mat ( const Mat & m,
const Range & rowRange,
const Range & colRange = Range::all()
)
参数:
m被分配给被构造的矩阵的数组(作为一个整体或部分)。

没有数据被这些构造函数复制。

而是指向m数据或它的子数组的头指针被构造并与之关联。

如果有
引用计数器的话,计数器是递增的。

因此,当您使用这样的构造函数修改生成的矩阵时,您也会修改相应的m元素。

如果你想要一个独立的子数组拷贝,使用Mat::clone() .
RowRange 要取的m的行范围。

通常,范围开始是包含的,范围结束是除外的。

使用Range::all() 获取所有行。

colRange要取m的列范围。

使用Range::all() 获取所有的列。

9、cv::Mat::Mat ( const Mat & m,
const Rect & roi
)
参数:
m被分配给被构造的矩阵的数组(作为一个整体或部分)。

没有数据被这些构造函数复制。

而是指向m数据或它的子数组的头指针被构造并与之关联。

如果有引用计数器的话,计数器是递增的。

因此,当您使用这样的构造函数修改生成的矩阵时,您也会修改相应的m元素。

如果你想要一个独立的子数组拷贝,使用Mat::clone() .
roi感兴趣区域.
10、_Tp& cv::Mat::at ( int i0 = 0 )
返回指定数组元素的引用。

下面的示例初始化一个Hilbert矩阵:
Mat H(100, 100, CV_64F);
for(int i = 0; i < H.rows; i++)
for(int j = 0; j < H.cols; j++)
H.at<double>(i,j)=1./(i+j+1);
11、int channels () const
返回矩阵通道的数目。

12、Mat clone () const
创建数组的完整副本和底层数据。

13、void copyTo (OutputArray m) const
将矩阵复制到另一个矩阵。

参数
m目标矩阵。

如果在操作前没有适当的大小或类型,则重新分配
14、void create (int rows, int cols, int type)
分配新的数组数据
参数:
rows新的的行数。

cols 新列数。

type 新的矩阵类型。

15、int cv::Mat::depth ( ) const
返回矩阵元素的深度
该方法返回矩阵元素深度的标识符(每个单独通道的类型)。

例如,对于一个16位有符号的元素数组,该方法返回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 ) 16、uchar* cv::Mat::ptr ( int i0 = 0 )
返回指定的矩阵行的指针。

参数:
i0 一个基于行的索引。

公共属性
1、int cv::Mat::cols
矩阵的列
2、uchar* cv::Mat::data
指向数据的指针
3、int cv::Mat::dims
矩阵维数,> = 2
4、int cv::Mat::rows
当矩阵有超过2个维度时,行数和列(- 1,- 1)的数目。

相关主题