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)//第三行第一个元素的值  

矩阵数据类型:

      CV_<bit_depth>(S|U|F)C<number_of_channels>

S = 符号整型  U = 无符号整型  F = 浮点型

E.g.:

CV_8UC1 是指一个8位无符号整型单通道矩阵,

CV_32FC2是指一个32位浮点型双通道矩阵

CV_8UC1           CV_8SC1          CV_16U C1       CV_16SC1 
CV_8UC2           CV_8SC2          CV_16UC2        CV_16SC2 
CV_8UC3           CV_8SC3          CV_16UC3        CV_16SC3 
CV_8UC4           CV_8SC4          CV_16UC4        CV_16SC4 
CV_32SC1         CV_32FC1         CV_64FC1
CV_32SC2         CV_32FC2         CV_64FC2
CV_32SC3         CV_32FC3         CV_64FC3
CV_32SC4         CV_32FC4         CV_64FC4

 

其中,通道表示每个点能存放多少个数,类似于RGB彩色图中的每个像素点有三个值,即三通道的。

图片中的深度表示每个值由多少位来存储,是一个精度问题,一般图片是8bit(位)的,则深度是8.


前面讲到IplImage的数据结构,IplImage支持

IPL_DEPTH_8U,无符号8bit整数(8u)
IPL_DEPTH_8S,有符号8bit整数(8s)
IPL_DEPTH_16S,有符号16bit整数(16s)
IPL_DEPTH_32S,有符号32bit整数(32s)
IPL_DEPTH_32F,32bit浮点数,单精度(32f)

IPL_DEPTH_64F,64bit浮点数,双精度(64f)

   IplImage支持1,2,3,4个通道,使用nChannels域标明。

CvMat *mat=cvCreateMat(rows,cols,CV_<bit_depth>(S|U|F)C<number_of_channels>);

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值