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)
结果图像 -------------------------------------------> 预期图像
——
将图像转换为灰度后,您必须对图像进行阈值处理。由于您的输入图像是明亮背景上的深色文本,因此这应该是直截了当的。当您对灰度图像设置阈值时,您基本上是在说“强度值高于阈值 t 的所有像素应为白色,而所有其他像素应为黑色”。这是一种标准的图像处理技术,常用于图像预处理。
如果您打算进行图像处理,我强烈推荐 Brad Larson 的GPUImage,它是为此目的而设计的硬件驱动的 Objective-C 框架。它带有可供使用的阈值过滤器。
存在各种不同的阈值算法,但如果您的输入图像始终与给出的示例相似,我认为没有理由使用更复杂的方法。但是,如果存在光照不均匀、噪声或其他干扰因素的风险,建议使用自适应阈值或其他动态算法。据我所知,GPUImage 的阈值过滤器是自适应的。
| 归档时间: |
|
| 查看次数: |
4036 次 |
| 最近记录: |