2012-10-24 46 views
1

我想将从相机拍摄的图像转换为黑白色并打印出来。此图像仅取自文档或纸张。 所以我用了如下代码:如何删除光线和阴影通过GPUImage筛选器

{ 

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage: srcImg ];    

GPUImageAdaptiveThresholdFilter *stillImageFilter = [[GPUImageAdaptiveThresholdFilter alloc] init]; 
stillImageFilter.blurSize = 1; 


[stillImageSource addTarget:stillImageFilter]; 
[stillImageSource processImage]; 

UIImage *outputImg = [stillImageFilter imageFromCurrentlyProcessedOutput]; 
[stillImageSource release]; 
[stillImageFilter release]; 


} 

但输出图像有这么多的锯齿,因为图像是完全二值化,它只是需要局部二值化。所以我首先将源图像转换为灰度,然后给出最大对比度,图像看起来非常好,但光影无法移除。 任何想法,谢谢。

回答

0

尝试GPUImageAdaptiveThresholdFilter后应用GPUImageLuminanceThresholdFilter,并与 'blurSize' 属性发挥

-(UIImage *)doBinarize:(UIImage *)sourceImage 
{ 

GPUImagePicture *imageSource = sourceImage; 

    GPUImageAdaptiveThresholdFilter *stillImageFilter = [[GPUImageAdaptiveThresholdFilter alloc] init]; 
    stillImageFilter.blurRadiusInPixels = 8.0;//play with it 

    GPUImageLuminanceThresholdFilter *stillImageFilter2 = [[GPUImageLuminanceThresholdFilter alloc] init]; 
    stillImageFilter2.threshold = 0.5f;// 
    [stillImageFilter addFilter:stillImageFilter2]; 

    [stillImageFilter prepareForImageCapture]; 



    [imageSource addTarget:stillImageFilter]; 

    [imageSource processImage]; 


    UIImage *retImage = [stillImageFilter imageFromCurrentlyProcessedOutput]; 

    [imageSource removeAllTargets]; 

    return retImage; 
}