Opencv学习笔记(2)——辅助对象

一、cv::TermCriteria class

很多算法都有一些终止条件,比如何时结束或者接近什么情况时结束。cv::TermCriteria标识了这些结束条件,并且很容易传递给OpenCV3的算法。它包含三个成员变量:type、maxCount和epsilon 。
type可以被设置为:

cv::TermCriteria::COUNT——在maxCount迭代后结束;
cv::TermCriteria::EPS——在收敛速度低于ε时候结束;
cv::TermCriteria::COUNT | cv::TermCriteria::EPS——在两种条件下结束。

二 \cv::Range class

cv::Range类被用来指定一段连续的整数值,它包含 start和end 成员变量。通常情况下cv::Range包含start值但不包含end值,例如:cv::Range rng(0,4)包含0,1,2,3但不包含4。
使用 size() 成员函数可以获得range包含的数目,例如上例rng.size() 为4;

使用 empty() 可以判断range是否为空;

all() 包含Range的所有范围。

三、cv::Ptr 模板和垃圾回收

c++中的智能指针采用引用计数的方式来标识指针的被引用次数,当引用增加时计数会加1,引用减小时计数会减1;当引用计数为0即指针不再需要时,就会被销毁。OpenCV3中的cv::Ptr<>与c++智能指针的作用相同。
使用时需要让Ptr包裹想要创建的指针类型,例如:

cv::Ptr<Matx33f> p(new cv::Matx33f);
cv::Ptr<Matx33f> p = makePtr<cv::Matx33f>();

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

OpenCV3继承STL的 std::exception 异常定义了自己的 cv::Exception 异常类。cv::Exception 包含以下几个变量: code, err, func, file和line ,通过这几个变量可以很快定位和查询异常信息。
使用以下方式可以定义自己的异常:

CV_Error( errorcode, description );
CV_Error_( errorcode, printf_fmt_str, [printf-args] );
CV_Assert( condition );    // Condition test
CV_DbgAssert( condition );    // Condition test

五、cv::DataType<>

cv::DataType<>用于给基础类型提供说明描述,在c++中这种技术称为类特性。简言之,也就是记录某种数据类型深度多少,有几个通道,格式是什么等。定义如下:

template<typename _Tp> 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)
    };
};
 
 
//为了更好地理解,我们来看来自core.hpp的两个示例:
// Defination for float
template<> class DataType<float>
{
public:
    typedef float value_type;
    typedef value_type work_type;
    typedef value_type channel_type;
    typedef value_type vec_type;
    enum {
        generic_type = 0,
        depth = DataDepth<channel_type>::value,
        channels = 1,
        fmt = DataDepth<channel_type>::fmt,
        type = CV_MAKETYPE(depth, channels)
    };
};

六、 cv::InputArray和cv::OutputArray

cv::InputArray和cv::OutputArray代指所有的数组类型,使用它们可以简化输入输出而不需要关心具体的类型,更像是一种数组容器。cv::InputArray默认是const的,即只读的;而cv::OutputArray则无此限制。当无需输入或输出时,可以使用 cv::noArray() 。

你可能感兴趣的:(opencv,学习,计算机视觉)