2012-04-03 108 views
5

我在我的iPhone应用程序中使用tesseract。转换UIImage black'n白色,而不是灰度使用tesseract

我尝试了几个过滤器在我的图像转换为灰度图像,但我想有一个阈值设置,使图像内的唯一像素是黑色或白色的结果。

我成功地使用苹果灰度滤波器,给出了相应的结果。但它仍然是一个16位图像(纠正我,如果我错了)。我使用的是目前它的过滤如下:

- (UIImage *) grayishImage:(UIImage *)i { 

    // Create a graphic context. 
    UIGraphicsBeginImageContextWithOptions(i.size, YES, 1.0); 
    CGRect imageRect = CGRectMake(0, 0, i.size.width, i.size.height); 
// Draw the image with the luminosity blend mode. 
[i drawInRect:imageRect blendMode:kCGBlendModeLuminosity alpha:1.0]; 
    // Get the resulting image. 
    UIImage *filteredImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return filteredImage; 
} 

谁能为我提供过滤,得到纯黑色和白色像素,而不是灰度图像?

回答

12

可能做到这一点,最快的方式是使用OpenGL ES 2.0的着色器阈值适用于你的形象。我的GPUImage框架封装了这个,这样你就不用担心幕后的技术问题了。

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage]; 
GPUImageLuminanceThresholdFilter *stillImageFilter = [[GPUImageLuminanceThresholdFilter alloc] init]; 
stillImageFilter.threshold = 0.5; 
[stillImageSource addTarget:stillImageFilter]; 
[stillImageFilter useNextFrameForImageCapture]; 
[stillImageSource processImage]; 

UIImage *imageWithAppliedThreshold = [stillImageFilter imageFromCurrentFramebuffer]; 

您只需将您的彩色图像到这一点,因为这会自动从每个提取亮度:

使用GPUImage,你可以使用GPUImageLuminanceThresholdFilter和类似于下面的代码获取您的UIImage的定限版本像素并将阈值应用于此。阈值以上的任何像素都会变为白色,并且任何低于黑色的像素都会变为白色。您可以调整阈值以符合您的特定条件。

但是,对于要传入Tesseract的东西,更好的选择是我的GPUImageAdaptiveThresholdFilter,它可以像GPUImageLuminanceThresholdFilter一样使用,只有没有阈值。自适应阈值基于当前像素周围的9像素区域进行阈值操作,针对本地照明条件进行调整。这是专门为帮助OCR应用程序而设计的,所以它可能是这里的一种方式。

例从两个类型的过滤器的图像可以在this answer可以找到。

注意,通过UIImage的往返是比处理原始数据慢,所以作用于直接的视频或电影源时,这些过滤器快得多,并且可以实时对那些投入运行。我也有一个原始的像素数据输出,这可能会更快用于Tesseract。

+0

非常感谢这看起来很有希望。你知道一个人是否成功地使用了terreract和GPUImage框架?我发现很难将tesseract与其他框架结合在一起(特别是tesseract具有.mm文件的事实)。如果你能找到我的任何例子,线索......他们最欢迎的 – BarryK88 2012-04-04 09:31:38

+0

我不应该有任何不兼容(命名空间等),我知道。我知道其他人曾经说过他们会在Tesseract中使用这个功能,所以既然他们没有抱怨,我猜这个功能到目前为止还是有效的。不幸的是,我没有任何例子,因为我还没有自己尝试过。 – 2012-04-04 12:59:09

+0

我试过导入你的框架,但不能修复它。我添加了项目,设置依赖关系,导入.a文件链接库在构建设置,添加标题到我的.m文件,但我得到这个错误“***断言失败 - [GPUImageGrayscaleFilter createFilterFBOofSize:],/用户/ /Desktop/OCR废话/ Nieuw/Archive 2/GPUImageFilter.m:218“。你能帮我吗? – BarryK88 2012-04-05 14:08:22

相关问题