OpenCVでは、画像が浮動小数点型である場合、値が1.0より大きい場合は、imshow
を使用してそのピクセルのみを視覚化できます。値が1.0より大きい場合は、白いピクセルとして表示されます0.0未満の場合は黒のピクセルとして表示されます。 浮動小数点画像を視覚化するには、値を0.0 - 1.0
にスケールします。
変換部分について...デフォルトの引数で使用すると、cv::Mat::convertTo
関数は、指定された型の行列を作成し、ソース行列の値をコピーしてから、最も近い可能な値に丸めます。宛先データ型 値が範囲外の場合は、最小値または最大値にクランプされます。 imshow
のドキュメントで
、それことが書かれている:、画像は32ビット浮動小数点の場合、画素値は、値の範囲[0と255によって を乗算さ
1]は[0,255]にマッピングされる。
これは、0.0〜1.0の範囲の値のみが0〜255にマップされることを意味します。値が1.0より大きく、255を掛けた場合、255より大きくなります。 CV_8U
の範囲にクランプされ、最終的には255になります。最終的には255になります。と最大255の値が宛先マトリックスとして255になります。すべての浮動小数点値はfloor
になります。自動マッピングは行われません。
CV_8U
の範囲に値を適切にマップするには、関数cv::Mat::convertTo
の3番目と4番目のパラメータを使用して、変換が行われる前に値がスケーリングされるようにします。
A
の行列の最小値と最大値がMin
とMax
であるとします(Min!=Max
)。適切に0から255までの値をスケールする
、次の操作を実行できます。
if (Min!=Max){
A -= Min;
A.convertTo(B,CV_8U,255.0/(Max-Min));
}
また、直接このようにこれを行うことができます。
if (Min!=Max)
A.convertTo(B,CV_8U,255.0/(Max-Min),-255.0*Min/(Max-Min));
(アカウントzhangxaochenさんのコメントを考慮して、編集)
ありがとうsgar91、私はちょうど最小値が2.3221であり、最大値が1000であることを発見しました。この範囲を0-255にどのようにマップするのですか?私はconvertToの第3および第4パラメータに何を使用すべきですか? –
@KarthikMurugan ...更新された回答を確認してください。 – sgarizvi
'beta'フィールドは' -255.0/Min'の代わりに '-255.0 * Min /(Max-Min)'でなければなりません。 – zhangxaochen