OPENCV IMREAD()不返回iOS上的图像数据



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

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

它有效,至少在您往返运行应用程序的文档目录中保存和加载时。

//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()与之接口。您需要使用本地功能来加载和保存图像,但是一旦将其指向图像数据,就可以将其包装在CV :: MAT中,然后在OpenCV中对其进行处理。编写自己的cv_imread(),iOS的cv_imwrite()函数。

不难

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

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

从应用程序捆绑包加载图像时,这对我有用。

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

我只能与BMP一起使用,JPG和PNG现在在我的应用中无法使用。

有一个本机函数。

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

最新更新