一起折腾计算机视觉库

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

2019-08-13  本文已影响0人  He_Yu
方法一:使用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

上一篇下一篇

猜你喜欢

热点阅读