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 pcv::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 szcv::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 & r2r1 &= r2

同时包含矩形r1和矩形r2的最小面积矩形

cv::Rect r3 = r1 \| r2r1 \|= r2

矩形r平移x

cv::Rect r2 = r1 + xr1 += x

矩形r扩大s

cv::Rect r2 = r1 + sr1 += 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 z1cv::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 m33fcv::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 v2scv::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