OpenCV 3-2.3-辅助类

除了基本类型和大型容器之外,还有一系列辅助对象对于控制各种算法(如终止条件)或对容器执行各种操作(如“range”或“切片”)非常重要。还有一个非常重要的对象,智能指针对象cv::Ptr

cv::TermCriteria

许多算法需要一个停止条件。通常,停止条件要么是有限迭代次数(称为COUNT或MAX_ITER),要么是某种错误参数,基本上就是说,“如果误差都这么小了,可以退出了”(称为EPS-epsilon的缩写,代表一个很小的数字)。在许多情况下,最好同时拥有这两种功能,这样,即便算法永远不能“误差足够小”,它仍然会在某个时刻退出。

cv::TermCriteria对象封装了一个或两个停止标准,以便可以方便地将它们传递给OpenCV算法函数。它们有三个成员变量-typemaxCountepsilon-可以直接设置(它们是公共的),或者更多情况下,只是由构造函数以TermCri teria( int type, int maxCount, double epsilon )的形式设置。变量类型设置为cv::TermCriteria::COUNTcv::TermCriteria::EPS。也可以逻辑或将两者连在一起(即“|”)。cv::TermCriteria::COUNTcv::TermCriteria::MAX_ITER是一样的。如果终止条件包括cv::TermCriteria::COUNT,算法在maxCount次迭代之后终止。如果终止标准包括cv::TermCrite ria::EPS,那么就是在告诉算法在与算法的收敛性相关联的某个度量低于EPS之后终止。

cv::Range

cv::Range类用于指定连续的整数序列。cv::Range对象有两个元素:startend,通常使用构造函数cv::Range( int start, int end )设置。范围包括它们的起始值,但不包括它们的终止值,因此cv::Range rng( 0, 4 )包括值0、1、2和3,但不包括4。使用size()可以得到元素数量。在前面的示例中,rng.size()将等于4。还有一个成员empty()用于测试范围是否没有元素。最后,静态方法Range::all()返回一个特殊的变量,表示“整个序列”或“整个范围”,就像Matlab中的“:”或Python中的“…”。OpenCV 中所有Range的方法和函数都支持这个特殊的Range:: all()
比如

void my_function(..., const Range& r, ....)
{
   
    if(r == Range::all()) {
   
        // process all the data
    }
    else {
   
        // process [r.start, r.end)
    }
}

cv::Ptr模板和垃圾回收机制

C++中一个非常有用的对象类型是“智能”指针。该指针允许我们创建对某个对象的引用,然后将其传递。你可以创建更多对该对象的引用。当引用超出作用域时,智能指针的引用计数会递减。一旦所有的引用(指针的实例)都消失了,内存将被自动清理(释放)。

这就是智能指针的运作方式。首先,为要“包装”的类对象定义指针模板的实例。我们可以使用类似于cv::Ptr<cv::Matx33f> p(new cv::Matx33f);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值