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