背景
在使用OpenCV的imgcodecs类进行读取图片时,控制台打印出现了错误:libpng error: CgBI: unhandled critical chunk,代码如下所示:
NSString *nsFilename = [[NSBundle mainBundle] pathForResource:@"loading_imgBlue@3x.png" 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禁用,如下图所示:
原因分析
Xcode的特性,在编译运行时会压缩处理PNG文件,导致OpenCV读取PNG图片时解析出错,与源文件不同
扩展
当读取图片转换为Mat对象时,我们可以用另一种方法,先将图片转换为UIImage对象, 再转换为Mat对象,这样就可以兼顾Xcode对图片的优化,如下所示:
UIImage *image = [UIImage imageNamed:@"loading_imgBlue@3x.png"];
Mat matrix = Mat();
UIImageToMat(image, matrix);