OpenCV iOS 中的 VideoCapture 与 OpenCV C++
VideoCapture in OpenCV iOS vs OpenCV C++
我正在尝试打开存储的视频。
在使用 OpenCV 3.0 的 C++ 项目中,代码如下:
cv::VideoCapture capture;
if(capture.open("IMG_1181.MOV")){
cout << "opened";
}else{
cout << "not opened";
}
我可以毫无问题地打开视频文件,输出行显示 opened
。
但是,如果我使用完全相同的视频和完全相同的代码,但 OpenCV 的 iOS 版本设置为编译为 Objective-C++,则输出行给出 not opened
。我没有收到任何错误。就是视频打不开。有任何想法吗?
在 iOS 上,人们不能简单地只用文件名打开文件(或者至少我不能)。首先,您需要获取包的路径,然后使用该路径加载文件。例如:
// get main app bundle
NSBundle * appBundle = [NSBundle mainBundle];
// constant file name
NSString * videoName = @"IMG_1181";
NSString * videoType = @"MOV";
// get file path in bundle
NSString * videoPathInBundle = [appBundle pathForResource: videoName ofType: videoType];
// convert NSString to std::string
std::string videoPath([videoPathInBundle UTF8String]);
// load video
video = cv::VideoCapture(videoPath);
我正在尝试打开存储的视频。
在使用 OpenCV 3.0 的 C++ 项目中,代码如下:
cv::VideoCapture capture;
if(capture.open("IMG_1181.MOV")){
cout << "opened";
}else{
cout << "not opened";
}
我可以毫无问题地打开视频文件,输出行显示 opened
。
但是,如果我使用完全相同的视频和完全相同的代码,但 OpenCV 的 iOS 版本设置为编译为 Objective-C++,则输出行给出 not opened
。我没有收到任何错误。就是视频打不开。有任何想法吗?
在 iOS 上,人们不能简单地只用文件名打开文件(或者至少我不能)。首先,您需要获取包的路径,然后使用该路径加载文件。例如:
// get main app bundle
NSBundle * appBundle = [NSBundle mainBundle];
// constant file name
NSString * videoName = @"IMG_1181";
NSString * videoType = @"MOV";
// get file path in bundle
NSString * videoPathInBundle = [appBundle pathForResource: videoName ofType: videoType];
// convert NSString to std::string
std::string videoPath([videoPathInBundle UTF8String]);
// load video
video = cv::VideoCapture(videoPath);