学习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_ 包含两个对象的点,对象类型为T
cv::Rect_ 位置和宽高的类型均为T
cv::Vec<Type T, int H> 一个集合,元素的类型为T
cv::Matx<Type T, int H, int W> 一个H*W的矩阵,元素的类型为T
cv::Scalar_ 一个包含四个对象的集合(和cv::Vec<T,4>类似),对象类型为T

猜你喜欢

转载自blog.csdn.net/qq_34801642/article/details/107200611