OpenCV Mat类的访问

 OpenCV Mat是OpenCV中应用最多的一个类,本文分享了Mat数据的判断及访问数据的常用方式,最后对形参中InputArray进行了说明,官网介绍链接:https://docs.opencv.org/4.4.0/d3/d63/classcv_1_1Mat.html


1.Mat数据是否为空的判断  

第一种:bool empty(),当返回true时,total()==0或者data==NULL,这种情况可能是初始状况,或者pop_back()或者resize()后的结果,会导致M.total() == 0而M.data != NULL,用于imread后判断 ;

 第二种(img.data==NULL)


2.Mat访问数据的几种方式  

  2.1 使用at方式,检查安全性 ;
        img.at(i,j);
        img.at(i,j)[0];img.at(i,j)[1];img.at(i,j)[2];
   2.2 采用指针,得到行数据,然后按数组方式访问 ;
         uchar * p1=img.ptr(i); p1[j]访问列
   2.3 得到图像数据区,访问img.data+step[0]*i+step[j]*j;
         uchar *imgdata=img.data; imgdata+=img.step[0];      
   2.4 迭代器的方式 
         cv::Mat_::iterator it= image.begin();
         cv::Mat_::iterator itend= image.end();
         for ( ; it!= itend; ++it) {
              (*it)[0]= (*it)[0]&mask + div/2;
              (*it)[1]= (*it)[1]&mask + div/2;
              (*it)[2]= (*it)[2]&mask + div/2;
      }

3.InputArray,OutputArray作为Mat,vector类型的形参  

这种情况是C++采用类型转换构造函数的方法,将Mat,vector通过构造函数使用IputArray,OutputArray类型。


你可能感兴趣的:(OpenCV,opencv)