2013-02-28 61 views
0

我有一个UIImage显示从网上下载的照片。 我想知道,以编程方式发现图像是在B & W或颜色。如何检查图像是否是B&W在iOS中

+0

欢迎来到Core Image的世界。坐下来,你的GPU会瞬间起火。 – CodaFi 2013-02-28 22:59:42

+5

如果是[黑白世界的彩色图片](http://i.imgur.com/4rPGp.jpg)怎么办? – 2013-02-28 23:05:07

+1

@ACB即使使用完整的RGB色彩空间,图像仍然可以被视为黑白(灰度)。 – rmaddy 2013-02-28 23:21:29

回答

1

如果您不介意计算密集型任务,并且您想完成这项工作,请检查每像素的像素图像。

这个想法是检查每个单个像素的所有RGB通道是否相似,例如RGB 45-45-45是灰色的像素,也是43-42-44,因为所有通道都彼此接近。我期待每一个通道有一个类似的值(我使用的10阈值,但它只是随机的,你必须做一些测试),只要你有高于你的门槛,你能打破足够多的像素

循环一个标志的图像作为有色

代码没有测试,只是一个想法,并希望没有泄漏。

// load image 
CGImageRef imageRef = yourUIImage.CGImage 
CFDataRef cfData = CGDataProviderCopyData(CGImageGetDataProvider(imageRef)); 
NSData * data = (NSData *) cfData; 
char *pixels = (char *)[data bytes]; 

const int threshold = 10; //define a gray threshold 

for(int i = 0; i < [data length]; i += 4) 
{ 
    Byte red = pixels[i]; 
    Byte green = pixels[i+1]; 
    Byte blue = pixels[i+2]; 

    //check if a single channel is too far from the average value. 
    //greys have RGB values very close to each other 
    int average = (red+green+blue)/3; 
    if(abs(average - red) >= threshold || 
     abs(average - green) >= threshold || 
     abs(average - blue) >= threshold) 
    { 
     //possibly its a colored pixel.. !! 
    } 
} 
CFRelease(cfData); 
相关问题