您的位置:首页 > 运维架构

opencv中Mat数据类型的应用

2016-12-23 13:44 441 查看
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)[b]灰度图像(1维的)[/b]

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; 
拷贝[b]mat
的数据区到frame中,在拷贝数据前会有一步:frame.create(this->size , this->type) 

[/b]

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

[/b]

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);


[b]1)[/b]

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格式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: