Opencv中Mat的data数据只定义为uchar*类型,

opencv中Mat的数据定义为指向uchar 的指针,而构造函数又提供了许多其他类型。

其实数据在内存中是一维存储的,而图像基本结构是二维的,3D图像还会是三维的;同时,彩色图像还有多个channel(通道);为了便于编程使用,opencv对一维数据进行矩阵的抽象封装,这个就是Mat类;Mat是一个基础类,封装了构造函数,重载运算符和基础的运算函数(很多类似于matlab的函数);Mat_类就是利用模板类型继承于Mat,所以opencv是有模板类型的,就是Mat_。
不管是什么类型,Mat类中的data成员是一个unsigned char *,指向数据的第一个字节(同时还定义了datastart,dataend等,参看源代码),当你使用高级类型的getMat().data函数获得该对象的数据时,可以通过强制转换访问来获得你的数据类型比如我想看float类型图像的第[3,5]像素点的值,可以:((float )data)[5width+3]来访问,这样的访问比较原始。一般opencv core里面提供的算法是输入是InputArray和OutputArray;这两个和Mat有很大的关系,void * 就是指向Mat对象,同时加入了一些flag来判断Mat的类型比如是不是img等。
转载自:https://zhidao.baidu.com/question/872977803343572692.html

你可能感兴趣的:(计算机视觉)