【OPENCV学习】-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::Pointcv::Point{2,3}{i,f,d}
cv::Sizecv::Size2{i,f}
cv::Rectcv::Rect
cv::RotateRectcv::RotateRect
cv::Complexcv::Complex{f,d}
cv::Matxcv::Matx{1,2,3,4,6}{f,d}
cv::Veccv::cv::Vec{2,3,4,6}{b,s,w,i,f,d}
cv::Scalarcv::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平移xcv::Rect r2 = r1 + x
r1 += x
矩形r扩大scv::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::TermCriteriacv::TermCriteria(int type, int maxCount, double epsilon)
终止条件以确定何时退出
cv::Rangecv::Range(int start, int end)
确定一个连续的整数序列
cv::Ptrcv::Ptr<Matx33f> p(new cv::Matx33f)
cv::Ptr<Matx33f> p = makePtr<cv::Matx33f>()
智能指针
cv::ExceptionCV_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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值