0

CImgの使用; これをすばやく簡単に保ちます。

CImg<float> i = *spectralImages->at(currentImage);
disp.display(i);
float* f = i.data();

*(f)、*(f+1)、*(f+2) などをステップ実行して正しい数値 (255.0、245.0 など) を取得しているにもかかわらず、disp は黒い画像を表示しています。

私は一日中これに取り組んできました。私が見逃している CImg の癖はありますか?

編集: ファイルを BMP として保存すると正しい結果が得られるように見えるため、描画に問題があります。

4

1 に答える 1

0

CImg画像に含まれる値が1つだけ、または複数の等しい値の場合、ディスプレイのピクセル値に正規化が適用されるため、デフォルトのディスプレイではそれらが黒い画像として表示されます。CImgはあらゆるタイプの画像(float値を含む)を管理できるため、常に[0,255]のピクセル値を表示用に正規化します(もちろん、オブジェクトのピクセル値は変更せず、内部で正規化するだけです。その表示)。したがって、画像に単一のピクセル値がある場合、正規化は常に「0」になり、結果として黒い画像になります。

これは、おそらく正しいピクセル正規化引数を使用してCImgDisplay dispを作成しなかったことを意味します(デフォルトでは有効になっています)。dispは次のように構成する必要があります:

CImgDisplay disp(100,100,"my display",0);

ピクセル値のデフォルトの正規化を無効にします。

于 2013-01-10T08:23:24.163 に答える