CvStatModel、CvBoost、CvCascadeBoost源码解析之CvStatModel
来源:互联网 发布:彩神软件靠谱吗 编辑:程序博客网 时间:2024/06/06 06:47
CvStatModel的Stat是统计(statistics)的缩写,顾名思义,它表示的是统计模型,在opencv的machine learning模块中,它就是统计模型的基类。而adaboost算法作为boost算法中的一种,自然而然也是以CvStatModel作为基类的了。CvStatModel类的声明如下:
class CV_EXPORTS_W CvStatModel{public: //默认的无参构造函数,只做了一件事:把default_model_name赋值为"my_stat_model" CvStatModel(); //虚析构函数,因为类中有虚函数,所以析构函数也必须为虚,也只做了一件事,就是调用了clear()函数 virtual ~CvStatModel(); //这个函数在定义中什么都没做,我的理解是作者的目的是想继承它的类自己override自己类版本的clear函数,作用是释放内存,重置模型状态。 virtual void clear(); //后面四个函数在下文中详细说明 CV_WRAP virtual void save( const char* filename, const char* name=0 ) const; CV_WRAP virtual void load( const char* filename, const char* name=0 ) virtual void write( CvFileStorage* storage, const char* name ) const; virtual void read( CvFileStorage* storage, CvFileNode* node );protected: const char* default_model_name;};
CvStatModel类中有四个读写的函数,其定义如下:
void CvStatModel::save( const char* filename, const char* name ) const{ //指向文件的指针 CvFileStorage* fs = 0; //CV_FUNCNAME是一个宏定义,跟实际算法无关不用理会 CV_FUNCNAME( "CvStatModel::save" ); //__BEGIN__是宏定义,表示{ __BEGIN__; //CV_CALL,表示执行括号内的指令并检查运行状态,所以这里就是打开了一个名为filename的文件用作写的目的 CV_CALL( fs = cvOpenFileStorage( filename, 0, CV_STORAGE_WRITE )); //如果打开失败则报错 if( !fs ) CV_ERROR( CV_StsError, "Could not open the file storage. Check the path and permissions" ); //这里的write没有做实际的事情,虽然看起来像是往文件里面写入了模型的名字。因它是虚函数,所以继承者可以根据自己需要重写write write( fs, name ? name : default_model_name ); //__END__是宏定义,表示goto exit; exit: ; } __END__; //释放文件指针 cvReleaseFileStorage( &fs );}void CvStatModel::load( const char* filename, const char* name ){ //定义指向文件的指针 CvFileStorage* fs = 0; //CV_FUNCNAME是一个宏定义,跟实际算法无关不用理会 CV_FUNCNAME( "CvStatModel::load" ); //宏定义,前面说过了 __BEGIN__; CvFileNode* model_node = 0; //打开名为filename的文件用作读的目的 CV_CALL( fs = cvOpenFileStorage( filename, 0, CV_STORAGE_READ )); //如果打开失败就退出 if( !fs ) EXIT; //如果name不为空就从文件中读出名为name的节点 if( name ) model_node = cvGetFileNodeByName( fs, 0, name ); else { //如果name为空则开始获取根节点 CvFileNode* root = cvGetRootFileNode( fs ); //这里不是太明白 if( root->data.seq->total > 0 ) model_node = (CvFileNode*)cvGetSeqElem( root->data.seq, 0 ); } //这里的read没有做实际的事情,虽然看起来像是往文件里面读取了节点的内容。因它是虚函数,所以继承者可以根据自己需要重写read read( fs, model_node ); //宏定义,前面说过了 __END__; //释放文件指针 cvReleaseFileStorage( &fs );}void CvStatModel::write( CvFileStorage*, const char* ) const{ //源码里面只是设置了一个异常处理,没有做实际的事情 OPENCV_ERROR( CV_StsNotImplemented, "CvStatModel::write", "" );}void CvStatModel::read( CvFileStorage*, CvFileNode* ){ //源码里面只是设置了一个异常处理,没有做实际的事情 OPENCV_ERROR( CV_StsNotImplemented, "CvStatModel::read", "" );}
小结:CvStatModel类更像是一个基本准则,指出了继承此类的统计学习模型应该具备的几个基本的功能,但实际这个类并没有做什么事情。
阅读全文
0 0
- CvStatModel、CvBoost、CvCascadeBoost源码解析之CvStatModel
- CvStatModel
- opencv源码之一:cvboost.cpp
- supermarket 之源码解析
- EventBus之源码解析
- EventBus之源码解析
- 源码解析之--ArrayList
- opencv源码解析之:hog源码分析
- opencv源码解析之hog源码分析
- opencv源码解析之----hog源码分析
- Android源码探究之AsyncTask 源码解析
- activeMQ源码解析之源码调试启动
- 【源码解析】JDK源码之HashMap
- 【源码解析】JDK源码之LinkedHashMap
- 【源码解析】JDK源码之ArrayList
- 【源码解析】JDK源码之LinkedList
- 【源码分析】Guava源码解析之EventBus
- List源码解析之ArrayList源码分析
- 浅谈Tomcat+文件上传,部署在服务器上的历史文件消失问题
- 【消息队列MQ】各类MQ比较
- ExpandableListView
- 拖放
- PAT 乙级 1019
- CvStatModel、CvBoost、CvCascadeBoost源码解析之CvStatModel
- 关于Class.forName()
- 关于分布式一致性的探究
- HTML5 web存储
- Cookie及Redis在商城购物车系统中的使用
- POJ3237 Tree【树链剖分】
- Android 软键盘将指定的布局顶上去
- 十一、mcg-helper_V1.0.0-Beta软件介绍
- 关于分布式事务、两阶段提交协议、三阶提交协议