Mat:在openCV中用于存储矩阵数据的类型
Mat中能存储的数据:
cv::Mat_<_Tp>, cv::Mat_<double>, cv::Mat_<float>, cv::Mat_<uchar>, cv::Mat_<unsigned char>
openCV中规定的数据类型:
Mat类的创建:
1.cv::Mat::Mat(int rows,int cols,int type)//注意:type:矩阵中存储的数据类型,另如CV_8UC(n)中C(n)构建多通道,n指明通道数,不加C默认C(1),n最大取512
2.cv::Mat::Mat(Size size,int type)//size:2D数组变量的尺寸,通过Size(cols,rows)进行赋值,type一致:
3.cv::Mat::Mat(const Mat& m,const Range& rowRange,const Range& colRange=Range::all())//m已有的Mat类矩阵数据,rowRange行:如Range(2,5),colRange列:如Range(2,5)--------前闭后开
4.cv::Mat::Mat(int rows,int cols,int type,const Scalar& s)//s:给矩阵中的每个像素赋值的参数变量,例如Scalar(0,0,255),这是3通道
5.类方法赋值:
eye:单位矩阵 diag:对角矩阵 ones:元素全为1的矩阵 zeros:元素全为0的矩阵
举例:a=Mat::eye(3,3,type)
6.枚举法赋值:
举例:(类型为基本数据类型)
cv::Mat a=(cv::Mat_<int>(3,3)<<1,2,3,4,5,6,7,8,9);
cv::Mat b=(cd::Mat_<double>(2,)<<1.0,2.1,3.2,4.0,5.1,6.2);
Mat类矩阵的常用属性
cols,rows,step以字节为单位的矩阵的有效宽度,elemSize()每个元素的字节数,total()矩阵中元素的个数,channels矩阵的通道数
常用的Mat类矩阵的元素读取方式:
- at()
单通道:
int value=(int)a.at<uchar>(0,0);//括号内为矩阵行列坐标
多通道:
cv::Vec3b vc3=b.at<cv::Vector>(0,0);
- 指针ptr
cv::Mat b(3, 4, CV_8UC3, cv::Scalar(0, 0, 1));
for (int i = 0; i < b.rows; i++){
uchar* ptr = b.ptr<uchar>(i);
for (int j = 0; j < b.cols*b.channels(); j++){
cout << (int)ptr[j] << endl;
}
}
- 迭代器
cv::MatIterator_<uchar> it = a.begin<uchar>();
cv::MatIterator_<uchar> it_end = a.end<uchar>();
for (int i = 0; it != it_end; it++){
cout << (int)(*it) << " ";
if ((++i% a.cols) == 0){
cout << endl;
}
}
- 通过矩阵元素的地址定位方式
标签:容器,Mat,int,矩阵,cols,type,cv From: https://www.cnblogs.com/Zhaolongtao/p/17871107.html(int)(*(b.data + b.step[0] * row + b.step[1] * col + channel));//b.step[0]行步长,b.step[1]列步长