03 基本数据类型

Chapter 03 基本数据类型

基本类型

cv::Mat,可以表示任意维度的矩阵,大数组表示;

cv::Vec<> Vector模板,常用别名 cv::Vec{2,3,4,6}{b,w,s,i,f,d},以上组合都是有效的;继承自 cv::Matx<>

  • 元素访问 [i](i)
  • 叉积 v3f.cross(u3f)

cv::Matx<> 区别于Mat,用于处理特定的小矩阵,固定大小的矩阵别名 cv::Matx{1,2,3,4,6}{1,2,3,4,6}{f,d};

  • 矩阵的创建初始化:1.构造函数,2.静态函数 all(x)zeros()ones()eye() ;
  • 创建一个表示对角线的矩阵 diag(),例如 m31f = cv::Matx33f::diag() 创建一个3x1矩阵;
  • 创建服从均匀分布的矩阵 randu(min, max),例如 m33f = cv::Matx33f::randu(min, max);
  • 正态分布 nrand(mean, variance)
  • 元素访问 m(i,j); 可以直接进行矩阵运算和比较;类型转换;
  • 点积 m1.dot(m2)m1.ddot(m2) ; 改变维度 m91f = m33f.reshape<9,1>();
  • 获得子向量,行,列,对角线 get_minor<2,2>(i,j) , row(i), col(j), diag()
  • 转置 t() , 求逆 inv(method) // cv::DECOMP_LU, 元素积 m1.mul(m2);
  • 求解线性方程组 solve()

点类,cv::Point2i, cv::Point2f, and cv::Point2d, or cv::Point3i, cv::Point3f, cv::Point3d. 即 cv::Point{2,3}{i,f,d};

  • 点可以直接转化为对应的向量 (cv::Vec3f) p
  • 点积(dot(), ddot())、叉积(cross())、是否在矩形内 p.inside(r)

cv::Scalar 四维双精度向量,继承自cv::Vec<double,4>

  • 元素积 s1.mul(s2) ;
  • 四元共轭 s.conj() , 返回 cv::Scalar(s0, -s1, -s2, -s2) ;
  • 实数检测 s.isReal , 当 s1 == s2 == s3 == 0 时返回真。

cv::Size,有成员变量width和height,是 cv::Size2i 的别名, cv::Size2f 表示浮点数;

  • 计算面积 sz.area()

cv::Rect,cv::Point和cv::Size的结合,表示整型数据;

  • 面积 r.area() , 左上角 r.tl() ,右下角 r.br()
  • 是否包含某个点 r.contains(p)

cv::RotatedRect 表示一个非轴对称的矩形,包含了一个cv::Point2f表示的中心,一个cv::Size2f表示的大小,和一个float的角度;非模板类;

  • 返回角点列表 rr.points(pts[4])

复数类 cv::Complexf、cv::Complexd,标准的STL中也有实现,二者的主要区别在于成员访问方式,STL中使用 real()imag();

  • 成员访问:公有变量 z1.re z1.im ;
  • 复共轭 z2 = z1.conj()

b = unsigned char, w = unsigned short, s = short, i = int, f = float, d = double

帮助对象

cv::TermCriteria,算法在什么时候停止;

  • 包含三个公开成员变量 typemaxCountepsilon,可以通过构造函数设置初始值;
  • type 可以是 cv::TermCriteria::COUNTcv::TermCriteria::EPS 或者二者并;
  • cv::TermCriteria::COUNT 等同于 cv::TermCriteria::MAX_ITER

cv::Range,定义一个连续的整数序列,序列中包含了开始元素,但不包含结束元素;

  • 2个元素,startend ,构造函数初始化;
  • 元素个数 size() ,是否为空 empty()
  • 在任何地方使用 cv::Range::all() 声明对象的可用范围。

cv::Ptr,智能指针模板,自动进行引用计数,当计数为0时自动释放内存;

  • cv::Ptr<cv::Matx33f>() p(new cv::Matx33f) 或者 cv::Ptr<Matx33f> p = makePtr<cv::Matx33f>();
  • 支持 *-> 指针操作;
  • 是否指向了对象 p.empty()
  • 释放对象,自动调用 delete_obj(),一般来说该方法不做任何事,需要重载。

异常处理,cv::Exception继承自标准库中的std::exception;

  • 成员变量:(int)code(string)err(s)func(s)file(i)line;
  • 生成异常 CV_Error(errorcode, description)CV_Error_(errorcode, printf_fmt_str, [printf-args])
  • CV_Assert(condition) 测试条件并在不符合时抛出异常;
  • CV_DbgAssert(condition), 仅在Debug时生效;

cv::DataType<>模板,OpenCV库函数需要传递特定的数据类型概念时使用;

不懂

cv::InputArray 和 cv::OutputArray类

  • OpenCV的基本数据类型中,多是array类型,InputArray和OutputArray则指代以上大部分基础数据类型;
  • InputArray和OutputArray的最大区别是,前者是只读的;
  • cv::noArray() 返回 cv::InputArray,有特殊的用途。

工具函数

包含了数学操作、测试、错误生成、内存和线程处理、优化等函数。

函数描述
cv::alignPtr()对齐指针到给定的位数
cv::alignSize()对齐缓冲区大小到给定的位数
cv::cubeRoot()计算立方根
cv::CV_Assert()在给定条件不满足时抛出异常
CV_Error()创建cv::Exception异常并抛出,固定字符串
CV_Error_()创建cv::Exception并抛出,格式字符串
cv::allocate()分配C风格的对象数组
cv::deallocate()释放C风格的对象数组
cv::error()指明一个错误并抛出异常
cv::fastAtan2()以度为单位计算向量的二维角度
cv::fastFree()释放一个内存缓冲区
cv::fastMalloc()分配一个对齐的内存缓冲区
cv::format()使用类似sprintf格式创建STL字符串
cv::getCPUTickCount()从内部CPU计时器获取计数
cv::getTickCount()从系统获取计数
cv::getTickFrequency()获取每秒的计数
cv::getNumThreads()计算当前OpenCV使用的线程数量
cv::setNumThreads()设置被OpenCV使用的线程数量
cv::getThreadNum()获取当前的线程下标index
cv::getOptimalDETSize()计算计划传递给cv :: DFT()的数组的最佳大小
cvIsInf()检查浮点数x是否为无穷大
cvIsNaN()检查浮点数x是否为NaN
cvRound()取浮点数x到最接近的整数
cvCeil()对浮点数x进行上取整
cvFloor()对浮点数x下取整
cv::setUseOptimized()启用或禁用优化代码的使用(SSE2等)
cv::useOptimized()指示优化代码启用的状态

模板结构

和STL、Boost一样,OpenCV的很多功能基于模板实现;

函数功能
cv::Point_<Type T>由一对类型为T的对象组成的点
cv::Rect_<Type T>类型为T的位置,宽度和高度
cv::Vec<Type T, int H>H个类型为T的对象的集合
cv::Matx<Type T, int H, int W>H*W个类型为T的对象的集合
cv::Scalar_<Type T>4个类型为T的对象的集合(cv::Vec<T,4>)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值