5

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

在iOS下的功能imread()和工作?imwrite()

4

5 回答 5

9

它至少在您正在运行的应用程序的 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);
于 2012-10-25T07:30:36.233 回答
6

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

于 2012-10-22T16:03:19.077 回答
3

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

  1. 选定的目标Build Settings
  2. 搜索png
  3. 更改Compress PNG FilesNo
  4. 更改Remove Text Metadata From PNG FilesNo
于 2017-05-17T06:09:48.000 回答
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 目前在我的应用程序中无法使用。

于 2013-01-04T18:48:51.510 回答
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);
于 2017-04-07T20:12:41.753 回答