OpenCV引入类Algorithm来统一算法的参数读写接口。使用这一基类可以方便用户创建自定义算法类,而不用重新实现set(),get(),read(),write()。本文简单介绍如何使用Algorithm类来快速构建算法类。
在OpenCV的文档[1]中指出,继承Algorithm类来实现自定义算法类需要在算法类中添加一些“半标准”代码。具体步骤如下:
- 创建类并以Algorithm为基类。
- 将算法参数作为类的成员。(Algorithm::get()只支持某些数据类型(参考官方文档),要合理选择算法参数。)
- 将公有虚函数AlgorithmInfo* info() const;加入类中。
- 加上构造函数,AlgorithmInfo实例并实现info()方法。
- 在实现info()方法的文件内加入公有函数来调用该算法的info()。
Algorithm类及AlgorithmInfo类定义在opencv2/core/core.hpp中。
前三步naive。步骤4可以通过OpenCV在opencv2/core/internal.hpp中定义的宏CV_INIT_ALGORITHM来实现。
#define CV_INIT_ALGORITHM(classname, algname, memberinit) \
static ::cv::Algorithm* create##classname() \
{ \
return new classname; \
} \
\
static ::cv::AlgorithmInfo& classname##_info() \
{ \
static ::cv::AlgorithmInfo classname##_info_var(algname, c