2014-04-09 173 views
-1

我發現很多代碼將圖像轉換爲純黑色和白色。但沒有這個工作。轉換圖像爲黑色和白色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; 
} 

Result image ----------------------------------------- - >期望圖像

enter image description here - enter image description here

回答

4

你將不得不threshold像你已經將它轉換成灰度後。由於您的輸入圖像在明亮的背景上爲黑色文字,因此應該直截了當。當您閾值灰度圖像時,基本上是說「強度值超過閾值t的所有像素應該是白色,而所有其他像素應該是黑色」。這是一種標準圖像處理技術,通常用於圖像預處理。

如果您打算進行圖像處理,我強烈建議Brad Larson的GPUImage,這是一個硬件驅動的Objective-C框架。它配備了可隨時使用的閾值過濾器。

存在各種不同的閾值算法,但是如果您的輸入圖像總是與給出的示例類似,我沒有理由使用更復雜的方法。但是,如果存在照度不均勻,噪音或其他干擾因素的風險,建議使用adaptive thresholding或其他動態算法。據我所知,GPUImage的閾值濾波器是自適應的。

3

我知道這是回答,但它可能是其他人誰正在尋找此代碼

UIImage *image = [UIImage imageNamed:@"Image.jpg"]; 
UIImageView *imageView = [[UIImageView alloc] init]; 
imageView.image = image; 
UIGraphicsBeginImageContextWithOptions(imageView.size, YES, 1.0); 
CGRect imageRect = CGRectMake(0, 0, imageView.size.width, imageView.size.height); 
// Draw the image with the luminosity blend mode. 
[image drawInRect:imageRect blendMode:kCGBlendModeLuminosity alpha:1.0]; 
// Get the resulting image. 
UIImage *filteredImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
imageView.image = filteredImage; 

有用來不及感謝您

相關問題