0

いくつかのプロセスを高速化する過程で(名前を付けられません、申し訳ありません)、私は作成しようとしました

cv::Mat_<uchar> discretization;

フロートで深度マップを取得すると

cv::Mat_<float> depth_map;
discretization = depth_map / resolution_mtr;

ここで resolution_mtr は float です。その値は現在 0.1 です。これを行うと、深さ map の 0.48 という値に対して、5 の離散化値が得られます。私の理解では、それは 4 である必要があります。一番近い uchar に四捨五入されていると思います。for loop に入らずにこれを回避する方法はありますか? 基本的に、四捨五入ではなく、離散化でフロア値を使用したいと考えています。

4

2 に答える 2

0

結果から 0.5 を引くだけです。

このコード

float resolution_mtr = 0.1;
float vals[] = {0.48, 0.4, 0.38, 0.31};
cv::Mat_<float> depth_map(1,4,vals);
cv::Mat_<uchar> discretization( depth_map  / resolution_mtr - 0.5);

std::cout << "depth_map: " << depth_map << std::endl;
std::cout << "discretization: " << discretization << std::endl;  

次の結果が得られます。

depth_map: [0.47999999, 0.40000001, 0.38, 0.31]
discretization: [4, 4, 3, 3]
于 2013-03-12T21:12:01.050 に答える
0

継承されたクラス CvNoRoundMat を定義して、その operator+ をオーバーライドしないのはなぜですか?

于 2013-03-12T15:36:22.237 に答える