OpenCV imread()在iOS上不返回图像数据

我试图使用OpenCV的imread()函数来加载一个cv::Mat的JPEG图像,但它在iOS上失败(相同的代码在OS X上)。 返回的matrix是分配和有效的,但是是空的(即它不包含数据)。

imread()imwrite()函数在iOS下工作吗?

它起作用,至less在保存和加载正在运行的应用程序的文档目录中时可以。

 //Creating Path to Documents-Directory NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"ocv%03d.BMP", picNum]]; const char* cPath = [filePath cStringUsingEncoding:NSMacOSRomanStringEncoding]; const cv::string newPaths = (const cv::string)cPath; //Save as Bitmap to Documents-Directory cv::imwrite(newPaths, frame); 

iOS定义了自己的文件系统,我不相信imread()和imwrite()接口。 你需要使用原生的function来加载和保存图像,但一旦你得到一个指向图像数据的指针,你可以把它包装在cv :: Mat中,然后在opencv中处理它。 为iOS编写自己的cv_imread(),cv_imwrite()函数应该不难。

这从我的应用程序包加载图像时适用于我。

 NSString *path = [[NSBundle mainBundle] pathForResource:@"pattern" ofType:@"bmp"]; const char * cpath = [path cStringUsingEncoding:NSUTF8StringEncoding]; Mat img_object = imread( cpath, CV_LOAD_IMAGE_GRAYSCALE ); 

我只能得到它与bmps工作,但jpgs和PNG现在不适用于我的应用程序。

这有一个本地的function。

 #import <opencv2/imgcodecs/ios.h> // t and m are UIImage* instances. // transparentImage and maskImage are destination Mat. // true/false is alpha condition. UIImageToMat(t, transparentImage, true); UIImageToMat(m, maskImage, true); 

尝试将Compress PNG Files - Packaging设置更改为No

  1. 选定的目标Build Settings
  2. searchpng
  3. Compress PNG Files更改为No
  4. Remove Text Metadata From PNG FilesNo