学堂 学堂 学堂公众号手机端

OpenCV的数据类型 #-2

lewis 1年前 (2024-03-28) 阅读数 9 #技术


一、辅助对象1.1、cv::TermCriteria类

很多算法需要一个终止条件以确定何时退出。通常,终止条件的形式要么是达到允许的有限迭代次数(称为COUNT或MAX_ITER),要么是某种形式的误差参数(如果接近于如此程度,就可以退出,称为EPS,即epsilon的简称)。

​cv::TermCriteria​​对象把一个或两个终止条件封装,以方便传进OpenCV算法函数里。它们有三个成员变量(type,maxCount和epsilon),都可以直接设置(公有),更常见的做法是通过它们的构造函数​​TermCriteria(int type, int maxCount, double epsilon)​​​进行设置。变量type设置为​​cv::TermCriteria::COUNT​​​或者​​cv::TermCriteria::EPS​​​。也可以把两个条件并(使用位运算符 ​​|​​​ )在一起。​​cv::TermCriteria::COUNT​​​是​​cv::TermCriteria::MAX_ITER​​的同义词。


如果终止条件包含​​cv::TermCriteria::COUNT​​,就是告诉算法在maxCount次迭代之后终止;如果终止条件包含​​cv::TermCriteria::EPS​​,就是告诉算法在与算法收敛相关的某些度量降到epsilon以下后终止;
1.2、cv::Range类

​cv::Range​​​类用于确定一个连续的整数序列。​​cv::Range​​​对象有两个元素start和end,与​​cv::TermCriteria​​​类似,它们经常在构造函数​​cv::Range(int start, int end)​​​中设定,范围包含初始值start,但不包含end,因此​​cv::Range​​ rng(0, 4)包含值0、1、2、3,但是不包含4

函数

说明

cv::Range::size()

返回一个range对象的元素数量

cv::Range::empty()

返回一个range对象是否含有元素

cv::Range::all()

获得对象可用范围


1.3、cv::Ptr模板和垃圾收集

智能指针是C++中一个非常有用的类型。这个指针允许我们创建一个对象的引用,然后把它传递到各处。你可以创建更多的对该对象的引用,然后所有这些引用都会被计数。当引用超出范围,智能指针的引用计数就会减少。一旦所有的引用(指针的实例)消失,这个对象将自动清理(释放)。

指针模板实例:​​cv::Ptr<Matx33f> p(new cv::Matx33f)​​​或者​​cv::Ptr<Mat33f> p = makePtr<cv::Matx33f>()​

函数

说明

cv::Ptr::addref()

增加指针内部的引用计数

cv::Ptr::release()

减少指针内部的引用计数

cv::Ptr::empty()

确定一个智能指针是否指向一个已经被释放掉的对象

​cv::Ptr<>​​​中最后一个要了解的成员是​​delete_obj()​​,这是一个引用计数为零时自动调用的函数。默认情况下,这个函数定义了但不做任何事情。


1.4、cv::Exception类和异常处理

OpenCV使用异常来处理错误,OpenCV继承自STL的异常类​​std::exception​​​定义了它自己的异常类型​​cv::Exception​​(区别在于在命名空间cv内)。

类成员

含义

code

一个数字的错误码

err

产生异常的错误的字符串

func

错误发生的函数名

file

错误发生的文件

line

错误发生在文件中的行数

err、func、line全部都是STL字符串

有几个内置宏用于自己生产异常:

CV_Error(errorcode, description):生产并抛出一个有固定文字描述的异常;CV_Error(errorcode, printf_fmt_str, [printf-args]):以同样的方式工作,但允许你使用类似printf格式字符串和参数代替固定的描述;CV_Assert(condition)和CV_DbgAssert(condition)都会测试程序中所设定的条件(contidion),如果条件不符合则抛出异常。
1.5、cv::DataType<>模板

当OpenCV库函数需要传递特定数据类型的概念时,它们会创建一个​​cv::DataType<>​​​类型的对象。​​cv::DataType<>​​本身是一个模板,传递的实际对象是这个模板的特化。


1.6、cv::InputArray类和cv::OutputArray类

许多OpenCV的函数都把数组作为变量并把数组作为返回值,但在OpenCV中有各种各样的数组。例如:OpenCV支持的一些小的数组类型(cv::Scalar、cv::Vec、cv::Matx)、STL的​​std::vector<>​​​、大型数组类型​​cv::Mat​​​和​​cv::SparseMat​​。

为了防止接口变得复杂,OpenCV定义了​​cv::InputArray​​​和​​cv::OutputArray​​类型,它们表示支持上面的任何一个,这意味着库中使用​​cv::InputArray​​​和​​cv::OutputArray​​​作为形参的函数,可以使用任何数组类作为实参,例如cv::Scalar、cv::Vec和cv::Mat等等。同时,甚至还存在​​cv::InputOutputArray​​,指定用于就地计算的数据。

​cv::InputArray​​​和​​cv::OutputArray​​​之间的主要区别在于前者假设为常量(只读),而后者是可变量。当不需要对应的输出时,可以传递​​cv::noArray()​​。


二、工具函数

除了提供的专门的原始数据类型外,OpenCV库还提供一些专用功能,可用于更有效地处理计算机视觉应用中普遍出现的数学和其他问题。在库的环境中,它们被称为工具函数。工具函数包含数学操作、测试、错误生成、内存与线程处理,优化及其他的工具。

工具函数和系统函数

函数名称

描述

cvCeil()

向上取整

cvFloor()

向下取整

cvRound()

四舍五入

cv::alignPtr()

对齐指针到给定字节数

cv::alignSize()

将缓冲区大小与给定的字节数对齐

cv::allocate()

分配一个C风格的数字对象

cv::cubeRoot()

计算一个数的立方根

cv::CV_Assert()

如果给定条件不为真,则抛出异常

cv::Error()

构造cv::Exception(从固定的字符串)并抛出异常的一个宏

cv::Error_()

构造cv::Exception(从格式化的字符串)并抛出异常的一个宏

cv::deallocate()

释放一个C风格的数组对象

cv::error()

指示错误并抛出异常

cv::fastAtan2()

向量的二维角度的计算

cv::fastFree()

释放一个内存缓存区

cv::fastMalloc()

分配一个对齐的内存缓存区

cv::format()

以sprintf类似格式创建一个STL字符串

cv::getCPUTickCount()

从内部CPU计时器获得tick计数

cv::getNumThreads()

获得当前OpenCV使用的线程数

cv::getOptimalDFTSize()

计算要传递给cv::DFT()数组的最适宜大小

cv::getThreadNum()

获得当前线程的索引

cv::getTickCount()

获得系统的tick计数

cv::getTickFrequency()

获得每秒的tick数

cvIsInf()

判断一个浮点数是否无穷

cvIsNaN()

判断一个浮点数是否不是一个数

cv::setNumThreads()

设定OpenCV使用的线程数

cv::setUseOptimized()

开启或关闭优化代码(SSE2等)

cv::useOptimized()

指示代码优化的启用


版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门