在cv :: Mat中将float转换为uchar

时间:2013-03-12 14:18:50

标签: c++ opencv

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

cv::Mat_<uchar> discretization;

现在我在浮动中获得深度图

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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]