Mat的初始化以及Mat与数组的相互转化

转载https://blog.csdn.net/wangyang20170901/article/details/79006836

Mat类型数据的初始化方法可以有以下两种:

1、直接初始化

[cpp]  view plain  copy
  1. Mat_<float> T_L = (Mat_<float>(3, 1) << -518.97666, 01.20629, 9.14632);  
2、利用数组初始化
[cpp]  view plain  copy
  1. float A[4][3] = { 0 };  
  2. Mat A_mat = Mat(4, 3, CV_32F, A);//如果是double类型用64  

  注意:初始化数组时常遇到“无法显示标识符”的提示,可能用了中文的逗号;

Mat转化为数组可以用以下两种方法:

1、Mat中提供ptr函数

    用ptr访问任意一行像素的首地址,然后当做指针来读取这一行的数据,适合一行一行的横向访问

[cpp]  view plain  copy
  1. Mat M1;  
  2. float* row1 = M1.ptr<float>(0);//获取第一行首地址  
  3. float b[4] = { 0 };  
  4. for(int i=0;i<4;i++)  
  5. {  
  6.   b[i]=row1[i];//第一行的第i个数赋给b[i]  
  7. }  
2、使用Mat的成员函数at<>()

   直接给i,j赋值就可以随意访问图像中任何一个像素,其中j表示第j行,i表示该行第i个像素。如果访问所有的变量,效率很低。

[cpp]  view plain  copy
  1. M1.at<float>(2, 0)//第三行第一个元素的值  

猜你喜欢

转载自blog.csdn.net/xhyan523/article/details/80782932