1

如何使用 ios5 将 RGB 图像转换为 1 通道图像(黑/白)?

输入图像通常是书页的照片。目标是通过将复印件转换为 1 通道图像来减小复印件的大小。

4

3 回答 3

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];

这些也可以应用于实时相机馈送和相机拍摄的照片。

于 2013-03-27T16:36:10.557 回答
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];
于 2013-03-27T14:17:35.753 回答
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 图像,否则它将是黑色的。

于 2013-03-27T14:27:05.280 回答