我想知道如何从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因素只是这一刻的猜测。似乎运作得很好,但我会用这个因素玩一点。