本文实现将一张彩色图片转换为灰色图片。
方法一:通过自定义方法实现。
+(UIImage*)systemImageToGray:(UIImage*)image
{
int width = image.size.width;
int height = image.size.height;
//第一步:开辟颜色空间
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceGray();
//第二步:创建颜色空间的上下文
CGContextRef contextRef = CGBitmapContextCreate(nil, width, height, 8, 0,colorSpaceRef, kCGImageAlphaNone);
if (contextRef == nil)
{
return nil;
}
//第三步:渲染图片
CGContextDrawImage(contextRef, CGRectMake(0, 0, width, height), image.CGImage);
//第四步:创建图片 将绘制的颜色空间转成CGImage
CGImageRef grayImageRef = CGBitmapContextCreateImage(contextRef);
//第五步:将C/C++图片转成UIImage
UIImage * newImage = [UIImage imageWithCGImage:grayImageRef];
//释放内存
CGColorSpaceRelease(colorSpaceRef);
CGContextRelease(contextRef);
CGImageRelease(grayImageRef);
return newImage;
}
方法二:通过openCV框架实现。
#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>
+(UIImage*)imageToGray:(UIImage *)image
{
//第一步:将ios平台下的图片-->openCV图片
Mat mat_image_color;
UIImageToMat(image, mat_image_color);
//第二步:将openCV的图片进行灰度处理
Mat mat_image_gray;
//参数三:转换类型
cvtColor(mat_image_color, mat_image_gray, COLOR_RGB2GRAY);
//第三步:将灰色图片转成可现实图片
cvtColor(mat_image_gray, mat_image_color, COLOR_GRAY2RGB);
//第四步:将openCV的图片转成ios图片
UIImage * newImage = MatToUIImage(mat_image_color);
return newImage;
}
如有错误请见谅!