OpenCV级联分类器加载错误iOS

目前我正在尝试使用OpenCV级联分类器来检测iOS应用中的人脸。 问题是,当我去加载分类器,它失败,因为“haarcascade_frontalface_alt.xml”的path名是不正确的。

这是我的代码:

cv::String face_cascade_name = "haarcascade_frontalface_alt.xml"; 

void detectFaces(cv :: Mat frame){

 cv::CascadeClassifier face_cascade; if (face_cascade.load(face_cascade_name)){ printf("Load complete"); }else{ printf("Load error"); } std::vector<cv::Rect> faces; std::vector<cv::Mat> rgbChannels(3); cv::split(frame, rgbChannels); // Making the frame gray scale cv::Mat frame_gray = rgbChannels[2]; face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE|CV_HAAR_FIND_BIGGEST_OBJECT, cv::Size(150,150)); if(faces.size()> 0){ printf("TRUE"); } 

}

由于这是一个iOS项目,我不知道如何在框架中find所需的XML文件的path。 将Cascade Classifier加载到iOS项目中的正确方法是什么? 或者,包含正确的文件名以便正确地看到它的正确方法是什么?

任何帮助,将不胜感激。

在iOS中,您需要在app bunnle中find文件path。 像这样的东西:

 // get main app bundle NSBundle * appBundle = [NSBundle mainBundle]; // constant file name NSString * cascadeName = @"haarcascade_frontalface_alt"; NSString * cascadeType = @"xml"; // get file path in bundle NSString * cascadePathInBundle = [appBundle pathForResource: cascadeName ofType: cascadeType]; // convert NSString to std::string std::string cascadePath([cascadePathInBundle UTF8String]); // load cascade if (face_cascade.load(cascadePath)){ printf("Load complete"); }else{ printf("Load error"); }