在cv::Mat中将float转换为uchar的偏移量

offset converting float to uchar in cv::Mat

本文关键字:uchar 转换 偏移量 float cv Mat 中将      更新时间:2023-10-16

在加快进程的过程中(不能命名,抱歉),我试图创建一个

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]