OpenCV|OpenCV Mat数据的按行(列)和多行(列)赋值

方法一:使用copyTo函数 【OpenCV|OpenCV Mat数据的按行(列)和多行(列)赋值】使用copyTo函数可以实现数据的复制,是一种克隆,而且可以实现单行(列),多行(列)的赋值;
代码如下

for (int i = 0; i < nStatus; i++) { Hgij[i](cv::Rect(0, 0, 3, 3)).copyTo(Rgij); Hcij[i](cv::Rect(0, 0, 3, 3)).copyTo(Rcij); Hgij[i](cv::Rect(3, 0, 1, 3)).copyTo(Tgij); Hcij[i](cv::Rect(3, 0, 1, 3)).copyTo(Tcij); tempAA = Rgij - eyeM; tempbb = Rcg * Tcij - Tgij; AA.push_back(tempAA); bb.push_back(tempbb); }

Mat c = Mat::zeros(3, 5, CV_32F); Mat a = Mat::ones(3, 6, CV_32F); //对a的第一列进行赋值 //a.col(0) = c.col(0); c.col(0).copyTo(a.col(0)); //将c的1-5列赋值给a //a.colRange(1, 6) = c; c.copyTo(a.colRange(1, 6));

方法二:按位置赋值
Rcg.copyTo(Hcg(cv::Rect(0, 0, 3, 3))); Tcg.copyTo(Hcg(cv::Rect(3, 0, 1, 3))); std::cout << "6666666666" << std::endl; Hcg.at(3, 0) = 0.0; Hcg.at(3, 1) = 0.0; Hcg.at(3, 2) = 0.0;

方法三:利用数组进行赋值
EM_Transform_Matrix[k] = (cv::Mat_(4, 4) << 1-2*data[2]*data[2]-2*data[3]*data[3], 2*data[1]*data[2]-2*data[0]*data[3], 2*data[1]*data[3]+2*data[0]*data[2],data[4], 2*data[1]*data[2]+2*data[0]*data[3], 1-2*data[1]*data[1]-2*data[3]*data[3], 2*data[2]*data[3]-2*data[0]*data[1], data[5], 2*data[1]*data[3]-2*data[0]*data[2], 2*data[2]*data[3]+2*data[0]*data[1], 1-2*data[1]*data[1]-2*data[2]*data[2],data[6], 0, 0, 0, 1);

这矩阵是不是赋得丧心病狂?23333333

    推荐阅读