libpng error: CgBI: unhandled critical chunk

背景

在使用OpenCV的imgcodecs类进行读取图片时,控制台打印出现了错误:libpng error: CgBI: unhandled critical chunk,代码如下所示:

    NSString *nsFilename = [[NSBundle mainBundle] pathForResource:@"[email protected]" ofType:nil];
    string filename = string([nsFilename UTF8String]);
    Mat matrix = imread(filename);

控制台报错打印:
libpng error: CgBI: unhandled critical chunk

解决办法

在TARGETS->Build Settings中搜索compress,将Compress PNG Files以及Remove Text Metadata From PNG Files禁用,如下图所示:


image.png

原因分析

Xcode的特性,在编译运行时会压缩处理PNG文件,导致OpenCV读取PNG图片时解析出错,与源文件不同

扩展

当读取图片转换为Mat对象时,我们可以用另一种方法,先将图片转换为UIImage对象, 再转换为Mat对象,这样就可以兼顾Xcode对图片的优化,如下所示:

    UIImage *image = [UIImage imageNamed:@"[email protected]"];
    Mat matrix = Mat();
    UIImageToMat(image, matrix);

你可能感兴趣的:(libpng error: CgBI: unhandled critical chunk)