OpenCV 3.4/c++;使用旧的xml文件 我得到OpenCV 3.4,我用C++开发Linux计算机。< /P>

OpenCV 3.4/c++;使用旧的xml文件 我得到OpenCV 3.4,我用C++开发Linux计算机。< /P>,c++,xml,opencv,face-recognition,haar-classifier,C++,Xml,Opencv,Face Recognition,Haar Classifier,我正在做一些人脸识别的事情,想用Haar分类器。我找到了经过预训练的嘴和鼻子,但它们是“old”.xml格式,如下所示: <opencv_storage> <Boca_17stages type_id="opencv-haar-classifier"> <size> 25 15</size> <stages> <_> <!-- stage

我正在做一些人脸识别的事情,想用Haar分类器。我找到了经过预训练的嘴和鼻子,但它们是“old”.xml格式,如下所示:

<opencv_storage>
    <Boca_17stages type_id="opencv-haar-classifier">
       <size>
        25 15</size>
       <stages>
       <_>
       <!-- stage 0 -->
          <trees>
       ...
<opencv_storage>
<cascade type_id="opencv-cascade-classifier"> 
 <stageType>BOOST</stageType>
  <featureType>HAAR</featureType>
  <height>20</height>
  <width>20</width>
  <stageParams>
  ...
我的代码与此类似:

 //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));
//给出了灰度图像myGrayMat
矢量眼;
媒介嘴;
CasscadeClassifier eyes=CascadeClassifier(“haarcascade\u frontalface\u alt.xml”)
CasscadeClassifier moutcas1=CascadeClassifier(“mouth.xml”);
CascadeClassifier moutcas2=CascadeClassifier();
moutcas1.load(“mouth.xml”);
//此处不发生任何事情,返回false,不创建任何文件
CascadeClassifier::convert(“mouth.xml”、“mouth\u new.xml”);
//效果很好:
眼睛检测多尺度(myGrayMat,眼睛,1.1,2,0 | CV|u HAAR|u FIND|u最大物体,大小(20,20));
//断言失败
Moutcas.detectMultiScale(myGrayMat,Mouts,1.1,2,0 | CV|u HAAR|u FIND|u最大物体,大小(15,25));
//断言失败
Moutcas.detectMultiScale(myGrayMat,Mouts,1.1,2,0 | CV|u HAAR|u FIND|u最大物体,大小(15,25));
有人能帮我吗?或者任何人都可以转换.xml文件吗?那太好了。
非常感谢

你能试试opencv 2.4吗?在那里,新旧级联都能正常工作。如果你在那里也遇到了问题,可能你的级联被破坏了。我会试试。可惜OpenCV在3.4版中有这样的问题。感谢您的回复。请在您的答案中添加一些解释/文字。感谢您提供此代码片段,它可能会提供一些有限的短期帮助。通过说明为什么这是一个很好的问题解决方案来正确解释它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
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")
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")