OpenCV中辅助对象指的是什么


今天就跟大家聊聊有关OpenCV中辅助对象指的是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在OpenCV中的很多算法都需要一个终止条件以确定何时退出。通常终止条件的形式要么是达到允许的有限迭代次数(称为COUNT或MAX_ITER),要么是某种形式的误差参数(如果接近于如此程度,就可以退出,称为EPS,即epsilon的简称)。在程序中,可以通过TermCriteria的公有变量来设置,当然,最常用的是通过他的构造函数进行设置。其中type设置为COUNT或EPS,也可以同时使用(用|连接)。设置过type之后,还需要设置相应的maxCount或epsilon。Range类用于确定一个连续的整数序列,Range对象有两个元素start和end,跟上面的TermCriteria相似,通常在构造函数中设置。这个Range的范围包括初始值start,但不包括终止值end。该类中有两个成员函数,一个是empty()用来测试一个range是否为空,另一个是all(),用来获取对象的可用范围。我们知道智能指针是C++中一个非常有用类型。这个指针允许我们创建一个对象的引用,然后把它传递到世界各地,可以创建更多的对该对象的引用,然后这些引用都会被计数,当引用超出作用范围的时候,智能指针的引用计数就会减少,一旦所有的引用都消失,那么这个对象就会自动清理释放。而作为程序员的我们,不必去记录这些东西。
接下来,我们了解下它的工作原理。首先,我们需要对想要封装的类对象定义一个指针模板的实例。可以通过如下调用实现:实现之后,就拥有一个智能指针p,可以当做标准指针来用比如支持操作符*和->等。一旦我们得到p,就可以创建其他相同类型的对象了,而不需要把一个指向新对象的指针传递给他们。
举个例子,比如像创建一个Ptr q,当你把p的值传递给q时,在后台的某个地方,智能指针就开始计数了。你可以像正常指针一样使用,但是这里实际上仍然只存在一个Mat33f实例,p和q同时指向它。当p超出生命周期被释放后,q就知道它是原始矩阵仅存的引用了,这个时候如果q的生命周期也结束的时候,就会去释放原始矩阵。有点类似于教室里最后一个同学离开的时候要关门关灯一样。
cv::Ptr()模板类有一些成员函数可以了解下:
addref()和release()增加和减少指针内部的引用计数(慎用)。
empty()函数,用来确定一个智能指针是否指向一个已经被释放掉的对象。
delete_obj()函数,这个函数是当引用清零之后自动调用,自定义类型的时候需要重载,用来释放对象的。
下面我们来通过一个例子来学习一下智能指针的应用。
这里我们创建一个指向FILE的智能指针,这里需要为Ptr模板重载delete_obj()函数。
接下来就可以使用这个指针做一些操作,而在离开范围的时候,不用自己去释放,如下:也就是说在最后的大括号,f离开作用范围,f内部的引用计数变为0,delete_obj()被f的析构函数调用,自动释放内存。OpenCV用异常来处理错误,OpenCV定义了自己的异常类cv::Exception,它继承自STL的std::exception。Exception类型有成员code,err,func,file和line,分别指一个数字对应的错误代码,对应产生异常错误的字符串,错误发生的函数名,错误发生的文件和错误出现在文件中的行数。err,func和file都是STL字符串。
有几个内置的宏,用于自己生成异常。CV_Error(errorcode, description)会生成并抛出一个有固定文字描述的异常,CV_Assert(condition)和CV_DbgAssert(condition)都会测试程序中所设定的条件,如果条件不符合,则抛出异常。这些宏是 香港云主机抛出异常的首选方法,因为它们会自动为你处理函数,文件和行。当OpenCV库函数需要传递特定数据类型的概念时,它们会创建一个DataType类型的对象,DataType本身是一个模板,传递的实际对象是这个模板的特化。许多OpenCV的函数都把数组作为变量并把数组作为返回值,但是在OpenCV中有各种各样的数组。我们已经了解到OpenCV支持一些小的数组类型,比如:Scalar,Vec,Matx,还有std::vector和后面讲讨论的大型数组(Mat和SparseMat),为了防止接口变得复杂,OpenCV定义了InputArray类和OutputArray类,它们表示“上面的任何一个”。
其实,InputArray和OutputArray之间的区别主要在于前者假设为常量(只读),后面的是变量。与InputArray相关的是特殊函数noArray(),它的返回值可以被用在任何需要InputArray的地方,以强调输入的是并没有被使用的输入量,有些函数有可选的输出数组,当不需要对应的输出时,可以传递noArray()。看完上述内容,你们对OpenCV中辅助对象指的是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: Spring事务的隔离级别到底有几种

这篇文章主要介绍“Spring事务的隔离级别到底有几种”,在日常操作中,相信很多人在Spring事务的隔离级别到底有几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring事务的隔离级别到底有几种”的疑惑有所帮助!接下来,…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/21 12:57
下一篇 09/21 12:57

相关推荐