OpenCV Mat數據的按行(列)和多行(列)賦值

方法一:使用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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容