1

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 で再度乗算して、0 から 1 の範囲の iOS の「通常の」色相値を取得します。0.05 という係数は、現時点では推測にすぎません。かなりうまくいっているようですが、私はその要素で少し遊ぶつもりです.

4

0 に答える 0