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, create##classname); \
return classname##_info_var; \
} \
\

本文介绍了如何利用OpenCV的Algorithm基类创建自定义算法类,避免重复实现set(), get(), read(), write()方法。通过继承Algorithm,添加特定的成员变量和info()函数,结合CV_INIT_ALGORITHM宏,可以简化自定义算法的实现过程。调用initModule_模块名后,可通过Algorithm::create()创建此类。"
80371792,7707546,STM32F3 IAP升级实践:通过RS-485和Ymodem协议,"['STM32', '嵌入式开发', 'RS485通信', '固件升级', 'IAP', 'Ymodem协议']

852

被折叠的 条评论
为什么被折叠?



