ネットからダウンロードした写真を表示する UIImage があります。画像が白黒かカラーかをプログラムで検出する方法を教えてください。
質問する
586 次
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 に答える