我想知道如何从 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 因子目前只是一个猜测。似乎效果很好,但我会在这个因素上玩一点。