如何使用ios5将RGB图像转换为1通道图像(黑/白)?
输入图像通常是书页的照片。 目标是通过将复印件转换为1通道图像来缩小复印件的尺寸。
答案 0 :(得分:3)
如果我理解您的问题,您希望根据像素的亮度对图像应用黑白阈值处理。要快速执行此操作,您可以使用我的开源GPUImage项目(支持iOS 4.x)以及它提供的一些图像处理操作。
特别是,GPUImageLuminanceThresholdFilter和GPUImageAdaptiveThresholdFilter可能就是您在这里寻找的内容。前者根据您设置的亮度阈值将像素变为黑色或白色(默认值为50%)。后者在应用此阈值时会考虑局部平均亮度,这可以为书籍上的文本产生更好的结果。
在UIImage上使用这些过滤器非常简单:
UIImage *inputImage = [UIImage imageNamed:@"book.jpg"];
GPUImageLuminanceThresholdFilter *thresholdFilter = [[GPUImageLuminanceThresholdFilter alloc] init];
UIImage *quickFilteredImage = [thresholdFilter imageByFilteringImage:inputImage];
这些也适用于实时相机送纸和相机拍摄的照片。
答案 1 :(得分:0)
您可以使用Core Image将图像处理为黑色和白色。
使用CIEdgeWork
,这会将您的图片转换为黑色和
有关核心图像编程的更多信息,请访问: - https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html#//apple_ref/doc/uid/TP30001185-CH3-TPXREF101
您正在寻找的代码可能就是:
CIContext *context = [CIContext contextWithOptions:nil]; // 1
CIImage *image = [CIImage imageWithContentsOfURL:myURL]; // 2
CIFilter *filter = [CIFilter filterWithName:@"CIEdgeWork"]; // 3
[filter setValue:image forKey:kCIInputImgeKey];
[filter setValue:[NSNumber numberWithFloat:0.8f] forKey:@"InputIntensity"];
CIImage *result = [filter valueForKey:kCIOutputImageKey]; // 4
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent];
答案 2 :(得分:0)
这里有一些示例代码,可能有帮助:
@implementation UIImage (GrayImage)
-(UIImage*)grayImage
{
int width = self.size.width;
int height = self.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate
(nil,width,height,8,0,colorSpace,kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);
if (context == NULL) {
return nil;
}
CGContextDrawImage(context,CGRectMake(0, 0, width, height), self.CGImage);
CGImageRef cgImage = CGBitmapContextCreateImage(context);
UIImage *grayImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGContextRelease(context);
return grayImage;
}
@end
我只是把它写成UIImage的类别,但不支持png图像,它有透明像素或者是黑色。