opencv中Mat数据类型的应用

来源:互联网 发布:js 数组添加 编辑:程序博客网 时间:2024/06/07 08:26

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格式




0 0
原创粉丝点击