1. ホーム
  2. c++

[解決済み] CV_8UとCV_32Fの違いと、両者を変換する際の注意点を教えてください。

2022-02-24 11:12:34

質問事項

あるコードが動作不良を起こしているのですが、これは間違ったタイプのデータを操作しているか、データ間の変換がうまくいっていないためだと思われます。

それは、以下のものを混ぜています。 cv::Mat オブジェクトの型は CV_8U (でjpgをグレースケールで読み取るときに作成されるものです。 cv::imread ), CV_32F および CV_32S .

これらのデータ型の違いと、データ型間の変換の際に注意すべき点は何ですか?

どのように解決するのですか?

CV_8U は,符号なし8ビット/ピクセルです.つまり,1つのピクセルが持つ値は0~255であり,これはほとんどの画像およびビデオフォーマットにおいて通常の範囲となります.

CV_32F は float - ピクセルが 0-1.0 の間の任意の値を持つことができます.これは,ある種のデータに対する計算には便利ですが,保存や表示のためには,各ピクセルに255を掛けて8ビットに変換する必要があります.

CV_32S は,各ピクセルに対する符号付き32ビット整数値です.これもピクセルに対して整数演算を行う場合に有用ですが,保存あるいは表示するためには,やはり8ビットに変換する必要があります.これは,より大きな範囲の値(±20億!)をどのように 0-255 に変換するかを決定する必要があるため,より厄介です.