【OpenCV学习】OpenCV中的辅助对象

在OpenCV中处理基本类型和大容器,还有一些列的辅助对象

它们对控制各种各样的算法(比如终止条件)和各种在容器上的操作(比如ranges或者slices)非常有用

1.cv::TermCriteria

很多算法需要一个终止条件确定何时推出,通常的形式是要么达到允许的有限迭代次数(成为COUNT或者MAX_ITER),要么是一种形式的误差参数。

cv::TermCriteria对象把一个或两个终止条件封装方便传进OpenCV算法函数里。它们有三个成员变量:type, maxCount以及epsilon,都可以直接设置(访问方式为共有)。

更常见的做法是通过它们的构造函数设置:

TermCriteria(int type, int maxCount, double epslion)

变量type设置为cv::TermCriteria::COUNT或者TermCriteria::EPS,也可以合并两个条件(使用位运算符:|)。

COUNT和cv::TermCriteria::MAX_ITER是同义词,也可以使用后者。

2.cv::Range类

cv::Range类用于确定一个连续的整数序列。该类的对象有两个元素start和end,与第一个TermCriter类似,经常在构造函数cv::Range(int start, int end)中设定,是个前闭后开区间。

  • 使用size()函数可以得到一个range类的元素数量。
  • 在cv::Range()类中有一个成员函数empty(),用测试是否含有元素。
  • cv::Range::all()可以用在任何需要获得对象可用范围的时候。

3.cv::Ptr模板和垃圾收集

智能指针是C++中一个非常有用的类型。

在OpenCV中,如果你想要为封装的对象定义一个指针模板的示例。可以通过这样的方式:

cv::Ptr p(new cv::Maxt33f);
cv::Ptr p = makePtr();

这个模板类的构造函数就拥有指向对应的对象,可以像正常的指针一样使用,是一种智能指针。

OpenCV中的 cv::Ptr<>模板和smart_ptr<>和Boost库中的shared_ptr<>指针都类似。

Ptr<>模板类支持多个接口中的与智能指针的引用计数功能相关的附加函数:

  • 函数addref()和release()增加和减少指针内部的引用计数
  • 函数empty()可以确定一个智能指针是否只想一个已经被释放掉的对象
  • delete_obj()这是一个引用计数为0时自动调用的函数,默认情况下这个函数使定义了但是不做任何事,可以重载该函数。

注:Ptr<>是线程安全的。

4.cv::DatatType模板

当OpenCV库函数需要传递特定数据类型的概念时,它们会创建一个cv::DataType<>类型的对象。

cv::DataType<>本身是一个模板,传递的对象是这个模板的特化。这允许cv::DataType<>对象同时包含该类型的运行信息,也允许它在编译的时候指向相同类型的它自己定义时的typedef生命。

DataType定义的模板类的示例如下:

template class DataType {
  typedef _Tp value_type;
  typedef value_type work_type;
  typedef value_type channel_type;
  typedef value_type vec_type;

  enum {
    generic_type = 1,
    depth        = -1,
    channels     = 1,
    fmt          = 0,
    type         = CV_MAKETYPE(depth, channels)
  };
};

5.cv::Exception类和异常处理

OpenCV使用异常来处理错误,它定义了自己的异常类型cv::Exception,继承自STL的异常类std::exception。

这个异常类除了在cv::命名空间以内之外没有任何特别。

你可能感兴趣的:(OpenCV学习)