c++ - IOS 上的 OpenCV 来自 C++ 的 haar 级联 xml 文件路径问题

标签 c++ ios xml opencv filepath

所以我有我的 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

最佳答案

在 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);
}

关于c++ - IOS 上的 OpenCV 来自 C++ 的 haar 级联 xml 文件路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20298129/

相关文章:

php - 使用 MKNetworkEngine 将图像 iOS 上传到 PHP - 我知道它有效,但无法让 PHP 捕获

ios - 按钮的图像在表格 View 中变得更长

android - AdView - android :configChanges in AndroidManifest. xml 缺少 adActivity

html - 如何使用 XPath 选择父节点?

c++ - 在 C++ 中将基于策略的设计与 CRTP 混合

c++ - 如何为已删除的默认构造函数编写测试

c++ - 设置默认的 union 成员

ios - 我可以使用 AVCaptureSession 将 AAC 流编码到内存吗?

php - 如何使用 Drupal 6 读取/写入 xml 文件

c++ - "List iterators incompatible"运行时