本文共 1578 字,大约阅读时间需要 5 分钟。
关于图像和大型数组类型,最简单直接的就是Mat类,也不必理会什么稠密数组或者稀疏数组。关于Mat类也有很多各种类型的构造函数,也不必一个个去记,只要知道最常用的Mat m ; 这种用法就行了;
我们需要额外知道的就是和固定矩阵类Matx类似的三个操作:直接访问是通过模板函数at<>()来实现。举例:
Mat m = Mat::eye(10, 10, CV_32FC2 ); printf("Element (3,3) is %f \n", m.at(3, 3) );
上面程序先创建了一个10*10大小的单位矩阵,然后对(3,3)处元素进行了访问。
Mat m1 = Mat::eye(10, 10, CV_32FC2 ); printf( "Element (3,3) is (%f,%f) \n", m.at(3, 3)[0], m.at (3, 3)[1] );
这种访问方法有很多变通,如下:
cv::Mat 区块访问有很多对象操作,下面就列举几个常用的:
需要注意的是,当你(对数组m)使用m.col( )或者m.col()时,m的数据并没有被复制到新的数组中,比如表达式m2 = m.row( 3 ) ; 这个表达式将创建一个新的数组头,并且分配他的data指针,step数组以及其他一些东西,这样它将可以访问m中的第三行数据。如果修改了m2中得到的数据,也会修改处于m中的数据。
从m0进行完全复制,该复制将复制所有的数据元素
将m0复制给m1,如果有必要,将给m1重分配内存空间(等同于m1 = m0.clone();)
设置m0所有元素为s,如果存在mask,则只对mask指定区域进行操作
在末尾增加一个m*1大小的数组
通过四个值t(最上),b(最下) , l ( 最左) , r (最右) 来调整ROI区域的范围
返回m0元素的类型(比如CV_32FC3)
返回m0通道中的元素类型(比如CV_32F)
返回m0的通道数目
返回m0的大小
如果数组没有元素,将返回true(比如m0.total= =0 或者 m0.data==NUILL)
此外还有与Mat稠密数组相对应的稀疏数组,当目前没用到过,也就不说了。
转载地址:http://hdewi.baihongyu.com/