学习OpenCV3:第3章 了解OpenCV的数据类型
其他
2021-01-31 15:36:29
阅读次数: 0
1、OpenCV的数据类型
- 根据组织结构,OpenCV的数据类型主页分成三类:直接从C=++原语中继承的基本数据类型,如int、float、数组、矩阵等;辅助对象,如垃圾收集指针类、用于数据切片的范围对象、抽象的终止条件等;大型数组类型,如cv::Mat、cv::SparseMat。
- 基本数据类型:cv::Point、cv::Size、cv::Rect、cv::RotateRect、固定矩形类cv::Matx、固定向量类cv::Vec、cv::Scalar。
- 访问成员:cv::Point、cv::Size、cv::Rect、cv::RotateRect通过变量名访问,如p.x、p.y等;固定向量类cv::Vec、cv::Scalar、固定矩形类cv::Matx通过下标访问,如myvec[0]、myscalar[2]。
- 类型别名中的原语: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