将图像转换为黑白 IOS?

Mah*_*vir -1 core-graphics objective-c ios

我找到了很多将图像转换为纯黑白的代码。但没有这个工作。

我试过这段代码,但它把图像转换为灰度而不是黑白。

  -(UIImage *)convertOriginalImageToBWImage:(UIImage *)originalImage
{
    UIImage *newImage;
    CGColorSpaceRef colorSapce = CGColorSpaceCreateDeviceGray();
    CGContextRef context = CGBitmapContextCreate(nil, originalImage.size.width * originalImage.scale, originalImage.size.height * originalImage.scale, 8, originalImage.size.width * originalImage.scale, colorSapce, kCGImageAlphaNone);
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetShouldAntialias(context, NO);
    CGContextDrawImage(context, CGRectMake(0, 0, originalImage.size.width, originalImage.size.height), [originalImage CGImage]);

    CGImageRef bwImage = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSapce);

    UIImage *resultImage = [UIImage imageWithCGImage:bwImage];
    CGImageRelease(bwImage);

    UIGraphicsBeginImageContextWithOptions(originalImage.size, NO, originalImage.scale);
    [resultImage drawInRect:CGRectMake(0.0, 0.0, originalImage.size.width, originalImage.size.height)];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();


    return newImage;
}
Run Code Online (Sandbox Code Playgroud)

结果图像 -------------------------------------------> 预期图像

在此处输入图片说明—— 在此处输入图片说明

Kas*_*nck 5

将图像转换为灰度后,您必须对图像进行阈值处理。由于您的输入图像是明亮背景上的深色文本,因此这应该是直截了当的。当您对灰度图像设置阈值时,您基本上是在说“强度值高于阈值 t 的所有像素应为白色,而所有其他像素应为黑色”。这是一种标准的图像处理技术,常用于图像预处理。

如果您打算进行图像处理,我强烈推荐 Brad Larson 的GPUImage,它是为此目的而设计的硬件驱动的 Objective-C 框架。它带有可供使用的阈值过滤器。

存在各种不同的阈值算法,但如果您的输入图像始终与给出的示例相似,我认为没有理由使用更复杂的方法。但是,如果存在光照不均匀、噪声或其他干扰因素的风险,建议使用自适应阈值或其他动态算法。据我所知,GPUImage 的阈值过滤器是自适应的。