2012-04-03 79 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