在加快进程的过程中(不能命名,抱歉),我试图创建一个
cv::Mat_<uchar> discretization;
现在当我在float中得到深度图
cv::Mat_<float> depth_map;
discretization = depth_map / resolution_mtr;
其中resolution_mtr为浮点数。目前它的值是0.1。当我这样做时,对于深度图中的值0.48,我得到的离散值为5。我的理解是应该是4。我猜是四舍五入到最接近的整数。有没有办法在不进入for循环的情况下跳出来?基本上,我想在离散化中使用底值,而不是四舍五入。
为什么不定义一个继承类cvnoroundat并覆盖它的操作符+呢?
你可以在结果中减去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]