博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv学习笔记六:图像和大型数组类型
阅读量:3949 次
发布时间:2019-05-24

本文共 1578 字,大约阅读时间需要 5 分钟。

前言

关于图像和大型数组类型,最简单直接的就是Mat类,也不必理会什么稠密数组或者稀疏数组。关于Mat类也有很多各种类型的构造函数,也不必一个个去记,只要知道最常用的Mat m ; 这种用法就行了;

我们需要额外知道的就是和固定矩阵类Matx类似的三个操作:

  1. cv::Mat::zeros(rows,cols,type) ; --------构造一个大小为rows*cols,数据类型为type指定类型的,值全为0的矩阵;
  2. cv::Mat::ones(rows,cols,type) ;---------构造值全为1的矩阵
  3. cv::Mat::eye(rows,cols,type) ; ----------构造单位矩阵

获取数组元素

独立获取数组元素

直接访问是通过模板函数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] );

这种访问方法有很多变通,如下:

  1. M.at( i ) ; 整型数组M中的元素i
  2. M.at( i,j ) ; 浮点型数组M中的元素(i,j);
  3. M.at( pt ) ; 整型矩阵M处于(pt.x,pt.y)的元素
  4. M.at(i,j,k); 三维浮点型矩阵M中处于(i,j,k)位置的元素
  5. M.at(idx); 无符号字符数组M中位于idx[ ] 所索引的n维位置的元素

通过块访问数组元素

cv::Mat 区块访问有很多对象操作,下面就列举几个常用的:

  1. m.row( i ) ; m中的第 i 行数组
  2. m.col( j ) ; m中的第 j 列数组
  3. m.rowRange( i0,i1 ) ; M中的第i0行到第i1-1行所构成的数组

需要注意的是,当你(对数组m)使用m.col( )或者m.col()时,m的数据并没有被复制到新的数组中,比如表达式m2 = m.row( 3 ) ; 这个表达式将创建一个新的数组头,并且分配他的data指针,step数组以及其他一些东西,这样它将可以访问m中的第三行数据。如果修改了m2中得到的数据,也会修改处于m中的数据。

数组的其他操作

m1 = m0.clone();

从m0进行完全复制,该复制将复制所有的数据元素

m0.copyTo(m1);

将m0复制给m1,如果有必要,将给m1重分配内存空间(等同于m1 = m0.clone();)

m0.setTo(s,mask)

设置m0所有元素为s,如果存在mask,则只对mask指定区域进行操作

m0.push_back(s)

在末尾增加一个m*1大小的数组

m0.adjustROI(t,b,l,r)

通过四个值t(最上),b(最下) , l ( 最左) , r (最右) 来调整ROI区域的范围

m0.type()

返回m0元素的类型(比如CV_32FC3)

m0.depth()

返回m0通道中的元素类型(比如CV_32F)

m0.channels()

返回m0的通道数目

m0.size()

返回m0的大小

m0.empty()

如果数组没有元素,将返回true(比如m0.total= =0 或者 m0.data==NUILL)


此外还有与Mat稠密数组相对应的稀疏数组,当目前没用到过,也就不说了。

转载地址:http://hdewi.baihongyu.com/

你可能感兴趣的文章
SOA业务理解与应用
查看>>
Google File System(中文翻译)
查看>>
Google's BigTable 原理 (翻译)
查看>>
MapReduce:超大机群上的简单数据处理
查看>>
设计模式笔记(转载)
查看>>
加站点加入IE的可信站点做法
查看>>
软件研发中的《破窗理论》
查看>>
敏捷的三种误区和五种改进
查看>>
用数字来看某知名B2C网站的发展内幕和隐私
查看>>
vs2010一些设置
查看>>
生活感悟语录
查看>>
用python中htmlParser实现的spider(python spider)
查看>>
在线测速网址
查看>>
mysql中GROUP_CONCAT的应用
查看>>
研发人员的绩效考核
查看>>
Python 3 之多线程研究
查看>>
Python 3中的多线程文件下载类
查看>>
Python库之MySQLdb介绍
查看>>
Python3中利用Urllib进行表单数据提交(Get,Post)
查看>>
Python开发之扩展库的安装指南及Suds(Webservice)的使用简介
查看>>