【问题标题】:OpenCV on IOS haar cascade xml file path issues from C++OpenCV on IOS haar cascade xml file path issues from C++
【发布时间】:2013-12-16 09:07:46
【问题描述】:

所以我有我的 C++ 代码,我可以在 linux/OSX/Android 上正常运行它。现在的问题是ios。我只是想通过完整路径“/foo/blah/myapp.app/haar.xml”加载 haar 级联 xml 文件,并有一个时间。

C++ 无法确认文件存在,opencv 也无法加载它。我是 ios 新手,我知道 myapp.app 可能是像 android .apk 目录一样的压缩目录。

我已经确认我找对地方了……或者至少我希望我找到了!检查我在 c++ 中使用 getcwd 来获取运行目录,并通过 xml 文件的文件路径确认这一点。它看起来合法!

我能做什么?将 C++ 用于 lib 的好处是我可以为桌面/android/ios 使用一个代码库。我真的不想为了文件路径而将 Objective-C 混入我的库中。

提前致谢!

我使用的代码如下:

    std::ifstream fexists(face_haar_path.c_str());
    if(!fexists.good()) {
        std::cout << "Could not find any facehaar.xml" << std::endl;
        return NO_FACE_HAAR_FILE;
    }

    face_haar.load(face_haar_path); //cv::CascadeClassifier face_haar

【问题讨论】:

    标签: c++ ios xml opencv filepath


    【解决方案1】:

    在 iOS 应用程序中添加对文件位置的引用是完全不同的。首先将.xml 文件添加到您的Xcode 项目中,并使用以下代码行来加载haar-cascade。请注意,不应包含扩展名.xml(例如:对于face_frontal.xml 文件,您的级联名称应为face_frontal

    NSString *faceCascadePath = [[NSBundle mainBundle]
                                 pathForResource:@"<your_cascade_name>"
                                 ofType:@"xml"];
    const CFIndex CASCADE_NAME_LEN = 2048;
    char *CASCADE_NAME = (char *) malloc(CASCADE_NAME_LEN);
    CFStringGetFileSystemRepresentation( (CFStringRef)faceCascadePath,
                                        CASCADE_NAME,
                                        CASCADE_NAME_LEN);
    if(!face_cascade.load(CASCADE_NAME)) {
        cout << "Unable to load the face detector!!!!" << endl;
        exit(-1);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-16
      • 1970-01-01
      • 2017-01-19
      • 2011-01-01
      • 2017-12-02
      • 2017-11-24
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多