创建矩阵对象
使用create(nrows, ncols, type)函数或Mat类构造函数。
M.create(100,60,CV_8UC(15)); // 将M指向新创建的大小为100*60的15通 道8位数组 ,原来的7*7数组空间将被释放
创建一个多维数组
int sz[] = {100 , 100 , 100};
Mat bigCube(3, sz, CV_8U, Scalar::all(0));
注:如果在构造函数参数中不标明矩阵维数,则构造函数会创建一个列数为1的二维数组,所以数组维数Mat::dims总是大于2(空矩阵的维数Mat:dims等于0)
使用拷贝构造函数或复赋值表达式创建数组,等式右边可为一个数组或表达式(赋值表达式创建的数组仅增加一个对原数组的引用计数,并不分配空间)若要完整复制一个数组可用Mat::clone()进行深度拷贝。
使用原数组的部分元素创建一个新的数组头:
M.row(3) = M.row(3) + M.row(5)*3; //将第5行乘以3加到第3行
Mat M1 = M.col(1); //数组M1指向M的第1列
M.col(7).copyTo(M1); //将第7列的值拷贝到第1列,不能用 M.col(1) = M.col(7)
Mat img(Size(320,240),CV_8UC3); //创建一个新的320*240的8位3通道图像
Mat roi(img, Rect(10,10,100,100)); //roi指向img的Rect区域
roi = Scalar(0,255,0); //roi数组所有元素赋值,即img的Rect区 域被(0,255,0)填充
使用locateROI()定位子数组在原数组中的位置:
Mat A = Mat::eye(10, 10, CV_32S); //创建一个10*10的单位数组
Mat B = A(Range::all(), Range(1, 3)); //提取A的1,2两列(不包括第3列)
Mat C = B(Range(5, 9), Range::all()); //提取B的5-8行
Size size; Point ofs; //size表示原数组的大小,ofs表示子数组在 原数组中的偏移量
C.locateROI(size, ofs); //size=(10 , 10) , ofs=(1 , 5)