OpenCV 3.4 / c++ CascadeClassifier 使用旧的 xml 文件
OpenCV 3.4 / c++ CascadeClassifier use old xml file
我有OpenCV 3.4,我正在使用c ++在Linux计算机上进行开发。
我正在做一些人脸识别的东西,想使用Haar-Cascadeclassifiers。我找到了预先训练的口鼻级联分类器,但它们是"旧".xml格式,如下所示:
<opencv_storage>
<Boca_17stages type_id="opencv-haar-classifier">
<size>
25 15</size>
<stages>
<_>
<!-- stage 0 -->
<trees>
...
OpenCV提供的.xml文件运行良好。这些文件是新版本,如下所示:
<opencv_storage>
<cascade type_id="opencv-cascade-classifier">
<stageType>BOOST</stageType>
<featureType>HAAR</featureType>
<height>20</height>
<width>20</width>
<stageParams>
...
我在不同的帖子中读到,OpenCV仍然可以处理那些旧的.xml文件,甚至可以转换它们。但是当我打电话给cv::CascadeClassifier::convert(const String& oldcascade, const String& newcascade)
时,什么也没发生,它返回false
;
当我加载一个旧的.xml文件并尝试detectMultiScale(...
时,我得到一个断言:
OpenCV Error: Assertion failed (!empty()) in detectMultiScale, file opencv-location/modules/objdetect/src/cascadedetect.cpp, line 1698
terminate called after throwing an instance of 'cv::Exception'
what(): opencv-location/modules/objdetect/src/cascadedetect.cpp:1698: error: (-215) !empty() in function detectMultiScale
我的代码如下所示:
//Greyscale image myGrayMat is given
Vector<Rect> eyes;
Vector<Rect> mouth;
CasscadeClassifier eyes = CascadeClassifier ("haarcascade_frontalface_alt.xml")
CasscadeClassifier mouthCas1 = CascadeClassifier("mouth.xml");
CassCadeClassifier mouthCas2= CascadeClassifier();
mouthCas1.load("mouth.xml");
//nothing happens here, returns false, no file is created
CascadeClassifier::convert("mouth.xml","mouth_new.xml");
//works well:
eyesCas.detectMultiScale(myGrayMat,eyes,1.1,2,0|CV_HAAR_FIND_BIGGEST_OBJECT,Size(20,20));
//Assertion fail
mouthCas.detectMultiScale(myGrayMat,mouths,1.1,2,0|CV_HAAR_FIND_BIGGEST_OBJECT,Size(15,25));
//assertion fail
mouthCas.detectMultiScale(myGrayMat,mouths,1.1,2,0|CV_HAAR_FIND_BIGGEST_OBJECT,Size(15,25));
谁能帮我?或者任何人都可以转换.xml文件吗?那就太好了。多谢!
CasscadeClassifier eyes = CascadeClassifier("haarcascade_frontalface_alt.xml")
cd /home/user/opencv-3.4.0/data/haarcascades
CasscadeClassifier eyes = CascadeClassifier ("/home/user/opencv-3.4.0/data/haarcascades/haarcascade_frontalface_alt.xml")
相关文章:
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- c++ 读取 xml 文件的内容
- 删除 XML 文件中的子节点C++
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 使用 libxml2 解析 XML 文件时缺少元素值
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 如何循环 n 次,在 xml 文件中每个循环一个级别
- 无法从 XML 文件中获取值
- 如何让用户在 tinyxml2 中输入 XML 文件的路径
- 使用 TinyXML2 读取 C++ 中的 XML 文件
- OPENCV - 如何在OpenCV中使用Haar Cascade Github xml文件?
- 我们如何重新制作程序以打开xml文件并在价格单词之后读取百分比值并更改此值
- 如何使用QXmlStreamReader解析包含对其他XML文件的引用的XML文件
- 如何解析列存储格式的XML文件
- OpenCV - 打开一个从C++到Python的XML文件
- 修改 XML 文件 QXMLStreamReader/Writer
- 如何使用libcurl c ++从url保存XML文件
- C++/RapidXML:编辑节点并写入新的 XML 文件没有更新的节点
- 如何使用所有其他文件信息来编译代码,例如HAAR级联训练的权重的XML文件
- 是否可以将信息从XML文件转换为CPP