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

时间:2012-10-22 15:35:46

标签: ios opencv

我尝试使用OpenCV的imread()函数在cv::Mat中加载JPEG图像,但在iOS上失败(相同的代码适用于OS X) 。返回的矩阵已分配且有效,但为空(即它不包含任何数据)。

功能imread()imwrite()是否适用于iOS?

5 个答案:

答案 0 :(得分:8)

它起作用,至少当你在正在运行的应用程序的Documents-Directory中保存和加载时。

//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);

答案 1 :(得分:6)

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

答案 2 :(得分:2)

当从应用包中加载图片时,这适用于我。

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和pngs现在在我的应用程序中不起作用。

答案 3 :(得分:1)

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

  1. 所选目标Build Settings
  2. 搜索png
  3. Compress PNG Files更改为No
  4. Remove Text Metadata From PNG Files更改为No

答案 4 :(得分:0)

这有一个原生功能。

#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);