1

CIImageオブジェクトを使用して、彩度の値を取得しようとしています。しかし、少なくともOS Xで利用可能なCIFilterを使用して、画像の彩度を取得する方法を見つけることができません。
標準のCIFilterを使用してCIImageの彩度を取得することは可能ですか?

4

3 に答える 3

3

CIColorControlsフィルターを見てください。このフィルターを使用すると、画像の彩度、明るさ、コントラストを調整できます。

彩度を計算するために、このフィルターはグレースケール イメージ (彩度 = 0.0) と元のイメージ (彩度 = 1.0) の間で線形補間を行います。フィルターは外挿をサポートします。値が 1.0 より大きい場合、彩度が上がります。

例:

CIFilter *colorControlsFilter = [CIFilter filterWithName:@"CIColorControls"];
[colorControlsFilter setDefaults];
[colorControlsFilter setValue:sourceImage forKey:@"inputImage"];
[colorControlsFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputSaturation"];
[colorControlsFilter setValue:[NSNumber numberWithFloat:0.2] forKey:@"inputBrightness"];
[colorControlsFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputContrast"];

CIImage *outputImage = [colorControlsFilter valueForKey:@"outputImage"];


CIColorControls参照はこちら. ▸ここに
ある すべての CIFilters .

于 2012-10-05T17:55:11.930 に答える
0

組み込みの CIFilter を使用して行うことはできませんが、非常に簡単にコーディングできます。完全な実装は提供しませんが、作業を行うサイカーネルを提供できます。

vec4 rgbToHsv(vec4 rgb) {
    float x = min(rgb.r, min(rgb.g, rgb.b));
    float v = max(rgb.r, max(rgb.g, rgb.b));
    float f = (rgb.r == x) ? rgb.g - rgb.b : ((rgb.g == x) ? rgb.b - rgb.r : rgb.r - rgb.g);
    float i = (rgb.r == x) ? 3.0 : ((rgb.g == x) ? 5.0 : 1.0);
    float h = i - (f / (v - x));
    float s = (v - x) / v;
    return (v == x) ? vec4(-1, 0, v, rgb.a) : vec4(h, s, v, rgb.a);
}

kernel vec4 saturationToGrayscale(sampler image) {
    vec4 color = sample(image, samplerCoord(image));
    vec4 hsv = rgbToHsv(color);
    return premultiply(vec4(vec3(hsv.g), color.a));
}

rgbToHsv 関数はAndy Finnell のブログから来ています

出力結果はグレースケール イメージで、白は sat == 1.0 を意味し、黒は sat == 0.0 を意味します。戻り引数で「hsv.g」の代わりに「1.0-hsv.g」を使用すると、これを元に戻すことができます。hsv.r と rsv.b をそれぞれ使用して色相と値を取得することもできます。

それをCIFilterにするのはあなたに任されています。これを行うには、Apple のカスタム フィルターの作成を参照してください。上記のコードは .cikernel ファイルで行われます。

于 2013-01-28T16:57:30.237 に答える
0

RGB イメージを YpCbCr に変換し、cbとのcr値を変更することで、RGB イメージの彩度を調整できます。Accelerate.vimage はこの変換を行うことができます。Apple には、まさにそのトピックについて説明しているサンプル コード プロジェクトがあります

vImage 操作を でラップして、CIImageProcessorKernelCore Image で使用できるようにすることができます。繰り返しますが、Apple には、その方法を説明する記事があります

それが役立つことを願って、

サイモン

于 2018-11-26T13:20:24.557 に答える