iOS5を使用してRGB画像を1チャンネル画像(黒/白)に変換するにはどうすればよいですか?
入力画像は通常、本のページの写真です。目標は、コピーを1チャンネル画像に変換してサイズを縮小することです。
iOS5を使用してRGB画像を1チャンネル画像(黒/白)に変換するにはどうすればよいですか?
入力画像は通常、本のページの写真です。目標は、コピーを1チャンネル画像に変換してサイズを縮小することです。
私があなたの質問を理解しているなら、あなたはピクセルの輝度に基づいて画像に白黒のしきい値を適用したいと思います。これをすばやく行うには、私のオープンソースのGPUImageプロジェクト(iOS 4.xに戻ることをサポート)と、それが提供するいくつかの画像処理操作を使用できます。
特に、GPUImageLuminanceThresholdFilterとGPUImageAdaptiveThresholdFilterは、ここで探しているものである可能性があります。前者は、設定した輝度しきい値に基づいてピクセルを黒または白に変換します(デフォルトは50%)。後者は、このしきい値を適用するときにローカル平均輝度を考慮に入れます。これにより、本のページのテキストに対してより良い結果を得ることができます。
UIImageでのこれらのフィルターの使用は非常に簡単です。
UIImage *inputImage = [UIImage imageNamed:@"book.jpg"];
GPUImageLuminanceThresholdFilter *thresholdFilter = [[GPUImageLuminanceThresholdFilter alloc] init];
UIImage *quickFilteredImage = [thresholdFilter imageByFilteringImage:inputImage];
これらは、ライブカメラフィードやカメラで撮影した写真にも適用できます。
Core Imageを使用して、画像を白黒に処理できます。
を使用するCIEdgeWork
と、画像が黒と白に変換されます
コアイメージプログラミングの詳細については、次のWebサイトをご覧ください。- https ://developer.apple.com/library/ios/#documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html#//apple_ref/doc/uid/TP30001185- CH3-TPXREF101
あなたが探しているコードはおそらくこれです:
CIContext *context = [CIContext contextWithOptions:nil]; // 1
CIImage *image = [CIImage imageWithContentsOfURL:myURL]; // 2
CIFilter *filter = [CIFilter filterWithName:@"CIEdgeWork"]; // 3
[filter setValue:image forKey:kCIInputImgeKey];
[filter setValue:[NSNumber numberWithFloat:0.8f] forKey:@"InputIntensity"];
CIImage *result = [filter valueForKey:kCIOutputImageKey]; // 4
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent];
ここにいくつかのサンプルコードがあります、多分役に立つでしょう:
@implementation UIImage (GrayImage)
-(UIImage*)grayImage
{
int width = self.size.width;
int height = self.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate
(nil,width,height,8,0,colorSpace,kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);
if (context == NULL) {
return nil;
}
CGContextDrawImage(context,CGRectMake(0, 0, width, height), self.CGImage);
CGImageRef cgImage = CGBitmapContextCreateImage(context);
UIImage *grayImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGContextRelease(context);
return grayImage;
}
@end
UIImageのカテゴリとして記述しているだけですが、透明なピクセルを持つpng画像はサポートされていません。そうでない場合は黒になります。