学习OpenCV3:第3章 了解OpenCV的数据类型


1、OpenCV的数据类型

  1. 根据组织结构,OpenCV的数据类型主页分成三类:直接从C=++原语中继承的基本数据类型,如int、float、数组、矩阵等;辅助对象,如垃圾收集指针类、用于数据切片的范围对象、抽象的终止条件等;大型数组类型,如cv::Mat、cv::SparseMat。
  2. 基本数据类型:cv::Point、cv::Size、cv::Rect、cv::RotateRect、固定矩形类cv::Matx、固定向量类cv::Vec、cv::Scalar
  3. 访问成员:cv::Point、cv::Size、cv::Rect、cv::RotateRect通过变量名访问,如p.x、p.y等;固定向量类cv::Vec、cv::Scalar、固定矩形类cv::Matx通过下标访问,如myvec[0]、myscalar[2]。
  4. 类型别名中的原语:b(unsigned int)、w(unsigned short int)、s(short int)、i(int)、f(float)、d(double)

2、基本数据类型

基本数据类型 别名格式
cv::Point cv::Point{2,3}{i,f,d}
cv::Size cv::Size2{i,f}
cv::Rect cv::Rect
cv::RotateRect cv::RotateRect
cv::Complex cv::Complex{f,d}
cv::Matx cv::Matx{1,2,3,4,6}{f,d}
cv::Vec cv::cv::Vec{2,3,4,6}{b,s,w,i,f,d}
cv::Scalar cv::Scalar
cv::Point类支持的操作 示例
默认构造函数 cv::Point2i p
cv::Point3i p
复制构造函数 cv::Point3f p2(p1)
值构造函数 cv::Pointf2i p(x0,x1)
cv::Pointf3d p(x0,x1,x2)
构造成固定向量类 (cv::Vec3f) p
成员访问 p.x p.y p.z
点乘 float x = p1.dot(p2)
double x = p1.ddot(p2)
叉乘 p1.cross(p2)
判断一个点是否在矩形r内 p.inside(r)
cv::Size类支持的操作 示例
默认构造函数 cv::Size sz
cv::Size2i sz
cv::Size2f sz
复制构造函数 cv::Size sz2(sz1)
值构造函数 cv::Size2f sz(w,h)
成员访问 sz.width sz.height
计算面积 sz.area()
cv::Rect类支持的操作 示例
默认构造函数 cv::Rect r
复制构造函数 cv::Rect r2(r1)
值构造函数 cv::Rect r(x,y,w,h)
由起始点和大小构造 cv::Rect r(p,sz)
由两个对角构造 cv::Rect r(p1,p2)
成员访问 r.x r.y r.width r.height
计算面积 r.area()
提取左上角 r.tl()
提取右下角 r.bl()
判断点p是否在矩形r内 r.contains(p)
cv::Rect类的覆写操作符 示例
矩形r1和矩形r2的交集 cv::Rect r3 = r1 & r2
r1 &= r2
同时包含矩形r1和矩形r2的最小面积矩形 cv::Rect r3 = r1 | r2
r1 |= r2
矩形r平移x cv::Rect r2 = r1 + x
r1 += x
矩形r扩大s cv::Rect r2 = r1 + s
r1 += s
比较矩形r1和矩形r2是否相等 bool eq = (r1 == r2)
比较矩形r1和矩形r2是否不相等 bool ne = (r1 != r2)
cv::RotateRect类支持的操作 示例
默认构造函数 cv::RotateRect rr()
复制构造函数 cv::RotateRect rr2(rr1)
由两个点构造 cv::RotateRect rr(p1,p2)
值构造函数 cv::Rect rr(p,sz,theta)
成员访问 rr.center rr.size rr.angle
返回四个角的列表 rr.points(pts[4])
cv::Complex类支持的操作 示例
默认构造函数 cv::Complex z1
cv::Complexd z2
复制构造函数 cv::Complex z2(z1)
值构造函数 cv::Complexd z(re)
cv::Complexd z(re,im)
成员访问 z.re z.im
复共轭 z2 = z1.conj()
cv::Matx类支持的操作 示例
默认构造函数 cv::Matx33f m33f
cv::Matx43d m43d
复制构造函数 cv::Matx22d m22d(n22d)
值构造函数 cv::Matx21f m(x0,x1)
cv::Matx23f m(x0,x1,x2,x3,x4,x5) //2行3列,从左到右,从上到下
含相同元素的矩阵 m33f = cv::Matx33f::all(x)
全零矩阵 m23d = cv::Matx23d::zeros()
全一矩阵 m16f = cv::Matx16f::ones()
单位矩阵 m33f = cv::Matx33f::eye()
创建可容纳另一个矩阵对角线的矩阵 m31f = cv::Matx33f::diag()
创建一个均匀分布的矩阵 m33f = cv::Matx33f::randu(min,max)
创建一个正态分布的矩阵 m33f = cv::Matx33f::nrandn(mean,variance)
成员访问 m(i,j) m(i)
矩阵代数运算 m1=m0 m0*m1 m0+m1 m0-m1
singleton代数 m*a a*m m/a
比较 m1==m2 m1!=m2
点积 m1.dot(m2)
m1.ddot(m2)
改变矩阵形状 m91f = m33f.reshape<9,1>()
变换操作符 m44f = (cv::Matx44f) m44d
提取(i,j)处2*2的子矩阵 m44f.get_minor<2,2>(i,j)
提取第i行 m14f = m44f.row(i)
提取第j列 m41f = m44f.col(j)
提取矩阵对角线 m41f = m44f.diag()
计算转置 n44f = m44f.t()
逆矩阵 n44f = m44f.inv(method)
解线性系统 m31f = m33f.solve(rhs31f,method)
m32f = m33f.solve<2>(rhs32f,method)
每个元素的乘法 m1.mul(m2)
cv::Vec类支持的操作 示例
默认构造函数 cv::Vec2s v2s
cv::Vec6f v6f
复制构造函数 cv::Vec3f u3f(v3f)
值构造函数 cv::Vec2f v2f(x0,x1)
cv::Vec6d v6d(x0,x1,x2,x3,x4,x5)
成员访问 v4f[i] v3w[j]
向量叉乘 v3f.cross(u3f)
cv::Scalar类支持的操作 示例
默认构造函数 cv::Scalar s
复制构造函数 cv::Scalar s2(s1)
值构造函数 cv::Scalar s(x0)
cv::Scalar s(x,0,x1,x2,x3)
元素相乘 s1.mul(s2)
四元数共轭 s.conj()
四元数真值测试 s.isReal()

3、辅助对象

辅助对象 作用
cv::TermCriteria cv::TermCriteria(int type, int maxCount, double epsilon)
终止条件以确定何时退出
cv::Range cv::Range(int start, int end)
确定一个连续的整数序列
cv::Ptr cv::Ptr<Matx33f> p(new cv::Matx33f)
cv::Ptr<Matx33f> p = makePtr<cv::Matx33f>()
智能指针
cv::Exception CV_Error(errorcode, description)
CV_Error_(errorcode, printf_mt_str, [printf-args])
CV_Assert(condition)
CV_DbgAssert(condition)
抛出异常,处理错误
cv::DataType<> 传输特定数据类型
cv::InputArray
cv::OutputArray
cv::InputOutputArray
cv::noArray
常用于形参,可接受任意数组类型(如cv::Vec,cv::Mat等)作为初始值

4、工具函数

工具函数和系统函数 描述
cvCeil(x) 对浮点数向上取整
cvFloor(x) 对浮点数向下取整
cvRound(x) 计算与浮点数最接近的整数
cvIsInf(x) 判断浮点数是否是正负无穷
cvIsNan(x) 判断浮点数是否不是一个数
cv::fastAtan2(y,x) 计算向量的二维角度(0~360)
cv::cubeRoot(x) 计算立方根
cv::format(fmt, ...) 以sprintf类似,创建一个STL字符串
cv::getOptimalDFTSize(n) 计算传递给cv::dft()的数组的最适宜大小
cv::alignPtr(ptr,n) 对齐指针到给定字节数
cv::alignSize(sz,n) 将缓冲区大小与给定的字节数对齐
cv::allocate(sz) 与new类似,分配一个C风格的数组对象
cv::deallocate(ptr, sz) 与delete类似,释放一个C风格的数组对象
cv::fastMalloc(size) 与malloc类似,分配一个对齐的内存缓冲区
cv::fastFree(ptr) 与free类似,释放一个cv::fastMalloc()分配的内存
cv::getCPUTickCount() 获取CPU的tick数
cv::getTickCount() 获取系统的tick数
cv::getTickFrequency() 每秒的tick数
cv::setNumThreads(nthreads) 设置使用的线程数
cv::getNumThreads() 获取当前使用的线程数
cv::getThreadNum() 获取当前执行的线程的索引
cv::setUseOptimized(on_off) 开启或关闭代码优化功能
cv::useOptimized() 判断是否开启代码优化
cv::CV_Assert(expt)
cv::CV_DbgAssert(expt)
判断expt,若为false则抛出异常
cv::CV_Error(ecode, estring)
cv::CV_Error_(ecode, fmt, ...)
构造cv::Exception并抛出一个异常
cv::error(ex) 提示错误并抛出异常

5、模板结构

通用的固定长度模板 描述
cv::Point_<Type T> 包含两个对象的点,对象类型为T
cv::Rect_<Type T> 位置和宽高的类型均为T
cv::Vec<Type T, int H> 一个集合,元素的类型为T
cv::Matx<Type T, int H, int W> 一个H*W的矩阵,元素的类型为T
cv::Scalar_<Type T> 一个包含四个对象的集合(和cv::Vec<T,4>类似),对象类型为T
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343