Mat类基础



创建矩阵对象

使用create(nrows, ncols, type)函数或Mat类构造函数。


Mat M(7,7,CV_32FC2,Scalar(1,3)); // 创建一个7*7的2通道32位浮点数组,并分配空间,并由1+3j初始化
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值