1

Halide を使用して簡単な画像計算プログラムを作成しようとしています。だから私は明るさ関数から始めます。

私はこれを得た

Halide::ImageParam img(Halide::type_of<float>(), 3);
img.set_stride(0, 4);
img.set_stride(2, 1);
Halide::Func f;
Halide::Var x, y, c;
Halide::Param<float> brightnesMod;

f(x, y, c) = img(x,y,c) * brightnesMod;

f.vectorize(x, 16).parallel(y);

auto & obuff = f.output_buffer();
obuff.set_stride(0, 4);
obuff.set_stride(2, 1);
std::vector<Halide::Argument> arguments = { img, brightnesMod };
f.compile_to_file("function", arguments);
return 0;

しかし、私には問題があります。私の画像はRGBA画像なので、アルファでアルゴリズムを計算します。どうすればそれをスキップして、f(x,y,c) を変更して c を 0-2 のみにすることができますか?

4

2 に答える 2

1

これは、c の出力範囲を 3 にすることを意味します。これは、他の次元と同じです。最小値と範囲があります。入力は RGBA であるため、4 チャンネル - その c エクステントは 4 です。

生成されるカラー チャネルの数は、パイプラインを呼び出すときに要求する範囲によって異なります。

あなたが使用することができます:

obuff.set_extent(c, 3);

チャンネル数を強制的に 3 にしたい場合は、3 チャンネルより多くまたは少なくリクエストしようとするとエラーが発生します。

于 2016-07-03T18:35:39.923 に答える