2013-03-27 1 views
0

ios5를 사용하여 RGB 이미지를 1 채널 이미지 (흑백)로 변환하려면 어떻게해야합니까?RGB 이미지를 1 채널 이미지 (흑백)로 변환

입력 이미지는 일반적으로 책 페이지의 사진입니다. 목표는 사본을 1 채널 이미지로 변환하여 사진 크기를 줄이는 것입니다.

+0

가능한 복제본 : http://stackoverflow.com/questions/1298867/convert-image-to-grayscale –

+0

그레이 스케일은 정확히 흑백 이미지가 아닙니다. 출력 이미지 행렬에서 픽셀 당 2 개의 값만 필요하고 256이 아닌 –

+0

AFAIK, 회색 음영은 단일 채널 이미지입니다 (너무). 질문을보다 정확하게 정의해야합니다. –

답변

3

질문을 이해하는 경우 픽셀의 광도를 기반으로 흑백 임계 값을 이미지에 적용하고 싶습니다. 이 작업을 빠르게 수행하려면 내 오픈 소스 GPUImage 프로젝트 (iOS 4.x로 다시 지원) 및 제공되는 이미지 처리 작업 두 가지를 사용할 수 있습니다.

특히 GPUImageLuminanceThresholdFilter 및 GPUImageAdaptiveThresholdFilter가 여기에서 원하는 것일 수 있습니다. 전자는 설정 한 휘도 임계 값을 기준으로 픽셀을 검정 또는 흰색으로 바꿉니다 (기본값은 50 %). 후자는이 임계 값을 적용 할 때 로컬 평균 휘도를 고려하므로 책 페이지의 텍스트에 대해 더 나은 결과를 생성 할 수 있습니다. 있는 UIImage에 이러한 필터의

사용법은 매우 간단하다 :

UIImage *inputImage = [UIImage imageNamed:@"book.jpg"]; 
GPUImageLuminanceThresholdFilter *thresholdFilter = [[GPUImageLuminanceThresholdFilter alloc] init]; 
UIImage *quickFilteredImage = [thresholdFilter imageByFilteringImage:inputImage]; 

이뿐만 아니라, 라이브 카메라 피드와 카메라로 촬영 한 사진에 적용 할 수 있습니다.

+0

대단하군요! 감사! –

0

코어 이미지를 사용하여 이미지를 검정색으로 처리 할 수 ​​있습니다. & 흰색.

사용 CIEdgeWork, 이것은 코어 이미지 프로그래밍에 대한 자세한 내용은 블랙과 whie

에 이미지를 변환합니다, 방문 : - :

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]; 
+1

CIEdgeWork는 검정 및 흰색 thresholding이 아닌 가장자리 감지를 수행하며 iOS 5.x에서는 사용할 수 없습니다. http://stackoverflow.com/a/11820675/19679 –

0

여기에 몇 가지 샘플 코드가 나와 있습니다.

@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 이미지를 지원하지 않거나 검정색으로 표시됩니다.

+0

흑백 (1 비트)은 그레이 스케일과 다릅니다. –