今天在iphone手机使用Opencv做图像处理的时候,发现使用opencv2.framework中自带的Mat转UIImage函数之后,图片的颜色有点偏差,发现代码有点小问题。
opencv中Mat存取图片的矩阵是按照BGR来的,然而转成UIImage之后,是按照RGB来的。问题就在这里。
解决方法:Mat在转为UIImage之前,由BGR转为RGB即可。上代码。。。
cvtColor(mat, mat, CV_BGR2RGB);
最终,完整的代码如下:
//Mat -> UIImage
-(UIImage *)MatToUIImage:(Mat)mat
{
cvtColor(mat, mat, CV_BGR2RGB);
NSData *data = [NSData dataWithBytes:mat.data length:mat.elemSize() * mat.total()];
CGColorSpaceRef colorspace;
if (mat.elemSize() == 1) {
colorspace = CGColorSpaceCreateDeviceGray();
}
else
{
colorspace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGImageRef imageRef = CGImageCreate(mat.cols, mat.rows, 8, 8 *mat.elemSize(), mat.step[0], colorspace, kCGImageAlphaNone|kCGBitmapByteOrderDefault, provider, NULL, false, kCGRenderingIntentDefault);
UIImage *image = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorspace);
return image;
}