OPenCV3.2中Mat对象常用函数属性总结
OpenCV的Mat数据格式及其遍历的程序资料说明

OpenCV 的Mat 数据格式及其遍历的程序资料说明
在opencv 早期的版本中,图像通过一个叫做IplImage 的结构(structure)存储在内存中。
由于C 语言对程序员高度的信任,因此它需要手动地对内存
进行管理,比如内存的分配和回收,这在大型程序设计中是比较麻烦的。
幸
运地是,C++可以很好地帮助程序员管理内存,因此opencv2.0 后就引入了
C++接口。
但是C++也有缺点,比如说目前大部分的嵌入式系统只支持C 语言,在这些平台上开发opencv 程序的话用C++就不是很好。
cv::Mat 是一个C++类,包含两部分:1)Matrix header,包括矩阵的size、存储方式、矩阵的存储地址等信息;2)指向Marix 的指针ji。
由于图
像处理算法通常都是计算密集型算法,出于程序速度上的考虑,opencv 的设
计应尽可能地避免拷贝大图像,为了解决这个问题,opencv 使用了引用计数
机制(reference counter system)【python 也使用了这个机制,参考之前的博客】。
简单来说,灭个Mat 对象都有自己的header,在进行copy 运算时,只
有headers 和指向矩阵的指针会被拷贝,而矩阵本身不会被拷贝,举个栗子:
上面的三个Mat 对象srcImg,dstImg,C 最终都只想同一个数据矩阵,虽然
它们的headers 是不同的。
对它们其中的任意一个进行修改都会影响另外两个对象。
上面程序的运行结果如图:
当然,如果想拷贝矩阵本身也是有办法的,opencv 提供了两个方法:。
OpenCV2:总结篇cv::Mat类

OpenCV2:总结篇cv::Mat类⼀.简介在OpenCV中,可以⽤C++语法的Mat类来表⽰⼀张图像也可以⽤C语法的lpllmage或CvMat结构体来表⽰⼀张图像1.单通道像素值2.多通道像素值OpenCV默认颜⾊顺序为BGR⼆.成员公有函数cv::Mat类能够⾃动管理内存,由矩阵头和指向存储所有像素值的矩阵的指针构成cv::Mat类表⽰⼀个n维的密集数值单通道或多通道数组,它可⽤于存储实数或复数值的向量和矩阵灰度和彩⾊图像体素向量场点云张量直⽅图等1.常⽤的成员函数Mat::Mat()Mat::~Mat()Mat::row // 创建⼀个具有指定了矩阵头中⾏数的参数的矩阵Mat::col // 创建⼀个具有指定了矩阵头中列数的参数的矩阵Mat::rowRange // 为指定的⾏span创建⼀个新的矩阵头,可取指定⾏区间元素Mat::colRange // 为指定的列span创建⼀个⼼得矩阵头,可取指定列区间元素Mat::clone // 创建⼀个数据及其基础数据的完整副本Mat::copyTo //Mat::convertToMat::zerosMat::onesMat::channelsMat::emptyMat::atMat::isContinuous() //判断图像存储是否连续2.不常⽤的成员函数Mat::addref()Mat::adjustROI()Mat::assignTo()Mat::at()Mat::begin()Mat::channels() Mat::checkVertor() Mat::clone() Mat::col() Mat::colRange() Mat::convertTo() Mat::copySize() Mat::copyTo() Mat::create() Mat::cross() Mat::deallocate() Mat::depth() Mat::diag() Mat::dot() Mat::elemSize() Mat::elemSize1() Mat::empty() Mat::end() Mat::eye() Mat::inv() Mat::isContinuous() Mat::isSubmatrix() Mat::locateROI() Mat::mul() Mat::ones() Mat::pop_back() Mat::ptr() Mat::push_back() Mat::push_back_() Mat::release() Mat::reserve() Mat::reshape() Mat::resize() Mat::row() Mat::rowRange() Mat::setTo() Mat::step1() Mat::t()Mat::total()Mat::type()Mat::zeros()3.成员数据class CV_EXPORTS Mat{public:// 标志位int flags;// 矩阵的维数,应该⼤于等于2int dims;// 矩阵的⾏数和列数,如果维度⼤于2,则都为-1int rows,cols;// 指向数据的指针uchar* data;// 指向引⽤计数的指针int* refcount;uchar* datastart;uchar* dataend;uchar* datalimit;MatAllocator* allocator;MSize size;MStep step;};4.构造函数Mat() // 默认构造函数Mat(int row,int cols,int type)Mat(Size size,int type)Mat(int rows,int cols,int type,const Scalar& s)Mat(Size size,int type,const Scalar& s)Mat(int ndims,const int* sizes,int type)Mat(int ndims,const int* sizes,int type,const Scalar& s)Mat(const Mat& m) // 拷贝构造函数Mat(int rows,int cols,int type,void* data,size_t step=AUTO_STEP)Mat(Size size,int type,void* data,size_t step=AUTO_SETP)Mat(int ndims,const int* sizes,int type,void* data,const size_t* steps=0)Mat(const Mat& m,const Range& rowRange,const Range& colRange=Range::all());Mat(const Mat& m,const Rect& roi);Mat(const Mat& m,const Range* ranges);Mat(const CvMat* m,bool copyData=false);Mat(const CvMatND* m,bool copyData=false);Mat(const IplImage* img,bool copyData=false);template<typename _Tp>explicit Mat(const vector<_Tp>& vec,bool copyData=false);template<typename _Tp,int n>explicit Mat(const Vec<_Tp,n>& vec,bool copyData=true);template<typename _tp,>三.cv::Mat 类型转换1.cv::Mat 类转换为 IplImage 类型和 CvMat 类型cv::Mat img;CvMat cvMatImg = img;IplImage iplImage = img;2.IpIImage 类型和 CvMat 类型转换为 cv::Mat 类型IplImage* iplImg = cvLoadImage("a.jpg");cv::Mat img(iplImg, true);。
CV::Mat介绍

CV::Mat介绍cv::Mat是OpenCV2和OpenCV3中基本的数据类型,在cv::Mat类中,关于cv::Mat的定义和初始化有多种不同的形式,这⾥,将对其进⾏详尽的总结和介绍。
⼀、⽆数据拷贝的cv::Mat的定义和初始化1、默认形式cv::Mat m;2、指定类型和⼤⼩(⾏列)的⼆维数组cv::Mat m(int rows, int cols, int type);3、有初始化值的指定类型和⼤⼩(⾏列)的⼆维数组cv::Mat m(int rows, int cols, int type, const Scalar& s);4、使⽤预先存在数据定义的指定类型和⼤⼩(⾏列)的⼆维数组cv::Mat m(int rows, int cols, int type, void* data, size_t step = AUTO_STEP);5、指定⼤⼩(size)和类型的⼆维数组cv::Mat m(cv::Size sz, int type, const Scalar& s);6、使⽤预先存在的数据定义的指定⼤⼩(size)和类型的⼆维数组cv::Mat m(cv::Size sz, int type, void* data, size_t step = AUTO_STEP);7、指定类型的多维数组cv::Mat m(int ndims, const int* sizes, int type);8、有初始化值的指定类型多维数组cv::Mat m(int ndims, const int* sizes, int type, const Scalar& s);9、使⽤预先存在的数据定义的指定类型的多维数组cv::Mat m(int ndims, const int* sizes, int type, void* data, size_t step = AUTO_STEP);⼆、从其他cv::Mat进⾏数据拷贝的定义和初始化1、拷贝构造形式cv::Mat m(const cv::Mat& mat);2、指定⾏列范围的拷贝构造cv::Mat m(const cv::Mat& mat, const cv::Range& rows, const cv::Range& cols);3、指定ROI的拷贝构造cv::Mat m(const cv::Mat& mat, const cv::Rect& roi);4、使⽤多维数组中指定范围内的数据的拷贝构造cv::Mat(const cv::Mat& mat, const cv::Range* ranges);三、使⽤OpenCV中的模板进⾏定义和初始化1、使⽤cv::Vec定义相同类型、⼤⼩为n的⼀维数组cv::Mat m(const cv::Vec<T, n>& vec, bool = copyData = true);2、使⽤cv::Matx定义相同类型、⼤⼩为mxn的⼆维数组cv::Mat(const cv::Matx<T, m, n>& vec, bool copyData = true);3、使⽤STL vector定义相同类型的⼀维数组cv::Mat(const std::vector<T>& vec, bool copyData = true);四、直接使⽤静态函数创建cv::Mat1、使⽤zeros()函数定义指定⼤⼩和类型的cv::Mat(全为0)cv::Mat m = cv::Mat::zeros(int rows, int cols, int type);2、使⽤ones()函数定义指定⼤⼩和类型的cv::Mat(全为0)cv::Mat m = cv::Mat::ones(int rows, int cols, int type);3、使⽤eye()函数定义指定⼤⼩和类型的cv::Mat(恒等矩阵)cv::Mat m = cv::Mat::eye(int rows, int cols, int type);五. IplImage与CV::Mat之间的转换A. 将IplImage-----> Mat类型Mat::Mat(const IplImage* img, bool copyData=false);默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建⼀个Mat矩阵头。
OPENCV对于Mat的理解和操作

OPENCV对于Mat的理解和操作1,Mat 是⽤来存储图⽚的数据他会把图⽚变成矩阵Mat src;int main(int argc, char** argv){src = imread("F:\\视觉\\opencv\\pic\\MatTest.png");//读图⽚cout << "灰度化后" << endl;cout << src << endl;}矩阵的格式如下图⽚时这样的:⽤dos显⽰是这样的灰度化之后是这样的怎么样是不是看上去有点熟悉没错,灰度化后直接把每个位置的像素的值,组成⼀个矩阵,⽽没有灰度化时是如图⼀所⽰。
2,Mat获取某⼀点坐标的值cout << (int)src.ptr<uchar>(1)[1] << endl;锐化的案例:int cols = (src.cols-1)*src.channels();int rows = src.rows;int channels = src.channels();int offsetx = src.channels();Mat dst1 = Mat::zeros(src.size(), src.type());for (int row = 1; row < (rows - 1); row++){const uchar* previous = src.ptr<uchar>(row - 1);const uchar* current = src.ptr<uchar>(row);const uchar* next = src.ptr<uchar>(row + 1);uchar* output = dst1.ptr<uchar>(row);for (int col = offsetx; col < cols; col++) {output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col])); }}imshow("锐化转化后", dst1);src.ptr<uchar>(row);是获取第⼏⾏的指针src.ptr<uchar>(1)[1];默认是char类型,所以要转成int类型输出才能看得到,不然会输出Hex码表对于的字符信息。
mat(mat m, rect roi)用法

mat(mat m, rect roi)用法您提到的`mat(mat m, rect roi)` 看起来像是OpenCV 中`cv::Mat` 类的构造函数的一部分,但它实际上并不完全正确。
在 OpenCV 中,`cv::Mat` 是所有矩阵/图像数据的基类。
这个类有许多构造函数,其中一些允许您创建一个新的 `cv::Mat` 对象,该对象是另一个 `cv::Mat` 对象的子集(或称为“ROI”或“Region of Interest”)。
以下是几个相关构造函数:1. `cv::Mat::Mat(const Mat& m, const Rect& roi)`* 这个构造函数从给定的 `cv::Mat` 对象 `m` 中创建一个子矩阵,该子矩阵由 `roi`(矩形区域)定义。
* 参数 `m` 是原始矩阵,而 `roi` 是一个 `cv::Rect` 对象,它定义了子矩阵的边界矩形。
2. `cv::Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)`* 这个构造函数从给定的 `cv::Mat` 对象 `m` 中创建一个子矩阵,该子矩阵由行范围和列范围定义。
* 参数 `m` 是原始矩阵,而 `rowRange` 和 `colRange` 是`cv::Range` 对象,分别定义了子矩阵的行范围和列范围。
例如:```cppcv::Mat image = cv::imread("path_to_image.jpg");cv::Rect roi(100, 100, 200, 200); // x, y, width, height cv::Mat subimage = image(roi); // 从image中提取一个矩形区域```在上面的例子中,我们从图像中提取了一个从 (100, 100) 开始,宽度和高度都为 200 的矩形区域。
opencv mat类运算

opencv mat类运算OpenCVMat类是OpenCV中最基本的数据类型之一。
它代表一个多维数组,可以用于存储图像、矩阵、点云等数据。
在实际应用中,我们经常需要对Mat对象进行各种运算,本文将介绍一些常用的Mat 类运算。
1. Mat对象的创建和初始化在使用Mat对象之前,我们需要创建它并对其进行初始化。
创建Mat对象的方法如下:Mat image;//创建一个空的Mat对象Mat image(rows,cols,type);//创建指定大小和类型的Mat对象其中,rows表示矩阵的行数,cols表示矩阵的列数,type表示矩阵的数据类型,常用的类型有CV_8UC1(8位无符号单通道)、CV_8UC3(8位无符号三通道)、CV_32FC1(32位浮点单通道)等。
Mat对象的初始化可以通过赋值、拷贝、从文件读取等方式进行。
2. Mat对象的运算Mat对象支持各种数学运算,包括加、减、乘、除、逻辑运算等。
下面以加法运算为例,介绍Mat对象的运算。
Mat a(rows,cols,CV_8UC1,Scalar(1));//创建一个大小为rows*cols,类型为CV_8UC1,值为1的Mat对象Mat b(rows,cols,CV_8UC1,Scalar(2));//创建一个大小为rows*cols,类型为CV_8UC1,值为2的Mat对象Mat result = a + b;//将a和b相加,结果保存在result中在进行运算时,需要注意Mat对象的大小和数据类型必须相同,否则会导致运算失败。
此外,Mat对象的运算速度较慢,应尽量避免在循环中使用。
3. Mat对象的转换Mat对象可以进行类型转换和通道分离,以便在不同的应用场景中使用。
下面以类型转换为例,介绍Mat对象的转换。
Mat a(rows,cols,CV_8UC1,Scalar(1));//创建一个大小为rows*cols,类型为CV_8UC1,值为1的Mat对象Mat b;//创建一个空的Mat对象a.convertTo(b, CV_32FC1);//将a转换为CV_32FC1类型,结果保存在b中在进行类型转换时,需要注意目标类型应该能够容纳源类型的值,否则会丢失精度。
mat常用函数

mat常用函数MATLAB是一种流行的数学软件,广泛应用于科学、工程、金融等领域。
它提供了许多常用的函数,用于数据处理、图像处理、信号处理等各种应用。
本文将介绍一些MATLAB常用的函数及其应用。
1. linspace函数linspace函数用于生成指定区间内的等间隔向量。
它的用法为:```x = linspace(start, end, n)```其中,start和end分别表示区间的起始值和终止值,n表示向量的长度。
linspace函数可以用于生成等间隔的时间序列,或者在一定范围内均匀采样。
2. numel函数numel函数用于计算数组的元素个数。
它的用法为:```n = numel(array)```其中,array表示输入的数组。
numel函数对于多维数组也适用,可以用于计算矩阵的总元素个数。
3. max函数和min函数max函数和min函数分别用于计算数组或矩阵的最大值和最小值。
它们的用法为:```m = max(array)n = min(array)```其中,array表示输入的数组或矩阵。
max函数和min函数可以用于查找数据集中的最大值和最小值,帮助我们分析数据的特征。
4. mean函数和median函数mean函数用于计算数组或矩阵的平均值,而median函数用于计算数组或矩阵的中位数。
它们的用法为:```m = mean(array)n = median(array)```其中,array表示输入的数组或矩阵。
mean函数和median函数可以用于描述数据的集中趋势,帮助我们了解数据的分布情况。
5. sort函数sort函数用于对数组或矩阵进行排序。
它的用法为:```sorted_array = sort(array)```其中,array表示输入的数组或矩阵。
sort函数可以按照升序将数据进行排序,帮助我们对数据进行整理和分析。
6. find函数find函数用于查找数组或矩阵中满足条件的元素的索引。
OpenCV中Mat总结

OpenCV中Mat总结⼀、数字图像存储概述数字图像存储时,我们存储的是图像每个像素点的数值,对应的是⼀个数字矩阵。
⼆、Mat的存储1、OpenCV1基于C接⼝定义的图像存储格式IplImage*,直接暴露内存,如果忘记释放内存,就会造成内存泄漏。
2、从OpenCV2开始,开始使⽤Mat类存储图像,具有以下优势:(1)图像的内存分配和释放由Mat类⾃动管理(2)Mat类由两部分数据组成:矩阵头(包含矩阵尺⼨、存储⽅法、存储地址等)和⼀个指向存储所有像素值的矩阵(根据所选存储⽅法的不同,矩阵可以是不同的维数)的指针。
Mat在进⾏赋值和拷贝时,只复制矩阵头,⽽不复制矩阵,提⾼效率。
如果矩阵属于多个Mat对象,则通过引⽤计数来判断,当最后⼀个使⽤它的对象,则负责释放矩阵。
(3)可以使⽤clone和copyTo函数,不仅复制矩阵头还复制矩阵。
三、Mat创建1、使⽤Mat构造函数Mat test(2,2,CV_8UC3,Scalar(0,0,255));2、使⽤Mat构造函数2int sizes[3] = {2,2,2};Mat test(3,sizes,CV_8UC3,Scalar::all(0));3、为已存在的IplImage指针创建信息头IplImage* img = cvLoadImage("1.jpg",1);Mat test(img);4、利⽤create函数Mat test;test.create(4,4,CV_8UC2);5、采⽤Matlab形式的初始化⽅式(1)Mat me = Mat::eye(4,4,CV_64F);(2)Mat mo = Mat::ones(2,2,CV_32F);(3)Mat mz = Mat::zeros(3,3,CV_8UC1);注:元素类型,即CV_[位数][带符号与否][类型前缀]C[通道数]四、Mat中相关成员的意义1、dataMat对象中的⼀个指针,指向存放矩阵数据的内存(uchar* data)2、dims矩阵的维度,3*4的矩阵维度为2维,3*4*5的矩阵维度为3维3、channels矩阵通道,矩阵中的每⼀个矩阵元素拥有的值的个数,⽐如说 3 * 4 矩阵中⼀共 12 个元素,如果每个元素有三个值,那么就说这个矩阵是 3通道的,即 channels = 3。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)的数目。