在用opencv做三维重构时,新学习了Mat矩阵,对于Mat的创建赋值有了一定了解,代码简单小结如下:
1、创建零/一矩阵
Mat mzeros = Mat::zeros(1, ix.rows, CV_32F);
Mat mones = Mat::ones(1, ix.rows, CV_32F);
2、创建空矩阵
其中:Mat_
Mat ix,iy;
ix.create(300, 9, CV_32F);
iy.create(300, 9, CV_32F);
Mat tempModel(rows ,cols, CV_32F);
int sz[] = { 3, 4, T };
Mat rt = Mat(3, sz, CV_32F, Scalar::all(0));
ix.at(n, k);
out_ix = ix.col(1).clone();//拷贝第一列,其中out_ix.cols = 1, out_ix.rows = ix.rows
out_ix1 = ix.clone();
ix.copyTo(out_ix2); //把ix的内容拷贝到out_ix2
B = A.t();
其中:tempModel是最后需要组合的Mat
Mat tempModel(4, ix.rows, CV_32F);
Mat submat = tempModel.rowRange(0, 1);
mix.copyTo(submat);
submat = tempModel.rowRange(1, 2);
miy.copyTo(submat);
submat = tempModel.rowRange(2, 3);
mzeros.copyTo(submat);
submat = tempModel.rowRange(3, 4);
mones.copyTo(submat);
1、在进行逐行赋值时,运用代码如下:
//1按行 无语法错,但不知道逻辑对不对...
out_iy.row(n2) = iy.row(n).clone(); //不正确
//2逐个
int k = ix.cols;
while (k--){//此方法赋值还是不正确!out还是零!
out_ix.at(n2, k) = ix.at(n, k);
}
折腾了一个多小时都没正确,干脆跳过这一段写下面的,结果在下面验证总体out_ix时,结果却是正确的!copy成功了!完全不知道为什么啊啊啊 !
这个问题先搁置在这里!找时间要把所有的原理深入学习一下~