0

ネットからダウンロードした写真を表示する UIImage があります。画像が白黒かカラーかをプログラムで検出する方法を教えてください。

4

1 に答える 1

3

計算負荷の高いタスクを気にせず、仕事を完了させたい場合は、画像のピクセルごとにチェックしてください。

たとえば、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);
于 2013-02-28T23:52:28.843 に答える