工作环境为:vs2013+opencv310版本
最开始想调用opencv自带训练好的人脸识别的数据库(haarcascade_frontalface_alt.xml),在网上找了一段代码,其中加载分类级联器的时候使用了之前版本的Cvload函数,然后可以编译通过,但是运行的时候,CvLoad一直会失败,返回值为NULL,并且在屏幕上会打印“The node does not represent a user object (unknown type?)”,报错的这句话是在opencv\sources\modules\core\src\persistence.cpp的CvRead函数中。
为了找到这个问题的原因, 通过cmake编译的opencv自带的单元测试进行调试。在test_optflowpyrlk.cpp文件中TEST(Video_OpticalFlowPyrLK, accuracy) 的单元测试中进行调试,发现上面的bflag1和bflag2都是false,因此会报错,为什么这两个值为false。
这个需要找到persistence.cpp中的icvXMLParseValue函数,在icvXMLParseValue函数中会调用cvFindType函数进行查找级联器的类别。
其中cvFindType的代码如下