0

在加快某些进程的过程中(无法命名,抱歉),我试图创建一个

cv::Mat_<uchar> discretization;

现在,当我在浮点数中获得深度图时

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

其中 resolution_mtr 是一个浮点数。目前它的值为0.1。当我这样做时,对于深度图中的 0.48 值,我得到离散化值 5。我的理解是它应该是 4 。我想它是四舍五入到最近的 uchar。有没有办法在不进入 for 循环的情况下解决这个问题?基本上我想在离散化中使用底值而不是四舍五入。

4

2 回答 2

0

为什么不定义一个继承的类 CvNoRoundMat 并覆盖它的 operator+ 呢?

于 2013-03-12T15:36:22.237 回答
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 回答