iOS:计算CVPixelBufferRef中出现的最多颜色

时间:2013-04-03 07:30:48

标签: ios objective-c image-processing colors

我想知道如何从iOS中的CVPixelBufferRef中找到“最常出现”的颜色。 有了这个,我不一定是代码样本,而只是它背后的技术。

我的第一个想法就是:添加所有颜色,将它们分开。这将为您带来平衡。但是,我的猜测,这总是会变成丑陋的褐色。

其他想法:计算某种颜色的最多出现次数。但这会给我带来问题:255,0, 135 和255,0, 134 不会是相同的颜色,尽管每个人都认为它是粉红色的。也许是这样,但是在“50”或者其他什么的“步骤”中,最终获得50的“中间”?那么即:数字153的范围是150-200,因此是175?

它应该给我一个RGB颜色(或其他),但它应该与图像具有相同的“感觉”..

注意:如果它很复杂或其他什么不是问题,我只是希望它是好的。不知道从哪里开始。 :)

更新:我现在正在使用下面的代码,而且它的工作效果非常好,因为代码很简单:

for(int i = 0; i < bufferSize; i += 4) {
    int b = myPixelBuf[i];
    int g = myPixelBuf[i+1];
    int r = myPixelBuf[i+2];

    float th, br;
    UIColor *color = [[UIColor alloc] initWithRed:( r / 255.0f) green:( g / 255.0f ) blue:( b / 255.0f ) alpha:1.0f];
    [color getHue:&th saturation:nil brightness:&br alpha:nil];

    int hueInt = floor(th / 0.05f);
    hueInt += 0.5;
    [array addObject:[NSNumber numberWithFloat:hueInt]];
}

最后,我只是从数组中获得最常出现的色调,并再次将其乘以0.05,以获得iOS的“正常”色调值,范围为0 ... 1。 0.05因素只是这一刻的猜测。似乎运作得很好,但我会用这个因素玩一点。

0 个答案:

没有答案