方法一:使用copyTo函数
使用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<double>(3, 0) = 0.0;
Hcg.at<double>(3, 1) = 0.0;
Hcg.at<double>(3, 2) = 0.0;
方法三:利用数组进行赋值
EM_Transform_Matrix[k] = (cv::Mat_<double>(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