Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV imread()在iOS上不返回任何图像数据_Ios_Opencv - Fatal编程技术网

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

OpenCV imread()在iOS上不返回任何图像数据,ios,opencv,Ios,Opencv,我正试图使用OpenCV的imread()函数在cv::Mat中加载JPEG图像,但在iOS上失败(同样的代码在OS X上工作)。返回的矩阵已分配且有效,但为空(即不包含数据) 函数imread()和imwrite()是否在iOS下工作?iOS定义了自己的文件系统,我不相信imread()和imwrite()与之接口。您需要使用本机功能来加载和保存图像,但一旦获得指向图像数据的指针,就可以将其包装在cv::Mat中,然后在opencv中处理。为iOS编写您自己的cv_imread()、cv_im

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


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

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

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

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

在从应用程序包加载图像时,这对我很有效

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);
#导入
//t和m是UIImage*实例。
//透明图像和maskImage是目的地图像。
//真/假是阿尔法条件。
UIImageToMat(t,透明图像,真);
UIImageToMat(m,maskImage,真);

尝试将
压缩PNG文件-打包
设置更改为

  • 选定目标
    生成设置
  • 搜索
    png
  • 压缩PNG文件更改为
  • 从PNG文件中删除文本元数据更改为

  • 谢谢你的提示。我得出了同样的结论,但我想确定这一点。你是吗?我使用本机iOS方法加载图像,效果很好。但在本例中,我试图在不同平台之间共享一些OpenCV代码……因此产生了一个问题。;-)我曾经尝试过在iOS上使用它们,但从未成功过。我从来没有看过imread()或imwrite()的内部,所以我不能说我确定没有办法让它们工作。如果他们这样做,我会感到震惊。希望有人能给你一个更明确的答案真的很有趣!我需要试试这个。谢谢。@MathieuGodart请随意接受这个答案,它会更好answer@Hammer你说得对。我想测试一下,但我现在没有时间…我想没有人能在5年内完成这项工作?谢谢!你真的需要将图像转换为.bmp,然后才能使用应用程序包中的imread读取它。这完全解决了我的问题!在我的项目中,jpg文件可以是
    imread()
    ,但不能是png。更改这些设置后,可以读取png。