opencv中Mat数据类型的应用

    xiaoxiao2021-03-25  29

    1.初始化

    1) cv::Mat M(3,4,CV_32F,cv::Scalar(0));

    2) Mat mat = Mat::zeros(color.rows,color.cols,CV_8UC3); //ones

    3) unsigned char* data;

    cv::Mat img(height, width, CV_8UC3, (unsigned char*)data);

    2.数据访问

    http://blog.csdn.net/xiaowei_cqu/article/details/7771760

    http://blog.csdn.net/xiaowei_cqu/article/details/19839019

    1) 彩色图像(3维的)

    unsigned char* data;

    Mat mat(height,width,CV_8UC3);    for (int row=0; row<height; row++)//Vec3d {       for(int col=0; col<width; col++)       {                      for(int k=0; k<3; k++)             {                      mat.at<Vec3b>(row,col)[2-k] = data[i++];              }        }

    }

    2)灰度图像(1维的)

    unsigned char* data;

    Mat mat(height,width,CV_8UC3);    for (int row=0; row<height; row++)//Vec3d {       for(int col=0; col<width; col++)       {                      for(int k=0; k<3; k++)             {                      mat.at<uchar>(row,col)= data[i++];              }        }

    }

    3.复制整副图像、区域图像数据

    1). 整副

    mat.copyTo(frame); //frame = mat;  拷贝mat数据区frame中,在拷贝数据前会有一步:frame.create(this->size , this->type) 

    Mat frame = mat.clone(); //frame = mat    完全拷贝,把mat中的所有信息拷贝frame 

    2)区域

    1) Mat mat = image(roi); 

    4. 拷贝时指定行列

     //cv::Mat R(3,3,CV_32FC1); //有数据的

    //cv::Mat T(3,1,CV_32FC1);

    cv::Mat M(3,4,CV_32FC1);

    1)

    R.copyTo(M.rowRange(0,3).colRange(0,3));   //R的3行3列数据拷贝到M对应的3行3列中, rowRange(0,3) ——0、1、2行

    T.copyTo(M.rowRange(0,3).col(3));//3*1

        

    2)

    R = M.rowRange(0,3).colRange(0,3);    //与1)刚好相反

    T = M.rowRange(0,3).col(3);//3*1  

    5) 格式转换

    Mat img1(640,480, CV_8UC1); img.convertTo(img1, CV_8UC1);    //将img转换到cv_8UC1格式

    转载请注明原文地址: https://ju.6miu.com/read-300198.html

    最新回复(0)