gpt4 book ai didi

c++ - 如何在 OpenCV 中限制 float 类型的 Mat 精度?

转载 作者:搜寻专家 更新时间:2023-10-31 01:39:49 32 4
gpt4 key购买 nike

我有一个 CV_32FC1 类型的矩阵,我想限制它的精度。例如,它的值是这样的:

[0.00021743798, 0.000174778698, 0.00011652464, 5.826234e-005, 1.561136e-005]

但我想限制其精度,使其看起来像这样(就像在 Matlab 中一样):

[0.0002, 0.0002, 0.0001, 0.0001, 0.0000]

我不是在寻找 std::setprecision 解决方案,而是要完全限制内部的矩阵值精度,因为在我的情况下,这会影响稍后与其他矩阵的乘法。更改矩阵类型没有帮助(至少)。我应该怎么办?谢谢。

最佳答案

也许这些应该有效(做一些初步检查)

float customPrecision(float in)
{
char buffer[15];
int bufLen = sprintf(buffer, "%.4f", in);
return atof(buffer);
}

我担心选择缓冲区大小,因为 float 可以给你 23 位有效数字、8 位指数和 1 位符号位。有人可以帮忙关于选择正确的缓冲区大小。

根据阿迪的建议,

float roundtoPrecision(float val,int precision)
{
// Do initial checks
float output = roundf(val * pow(10,precision))/pow(10,precision);
return output;
}

int main()
{
// your code goes here
float a[] = {0.00021743798, 0.000174778698, 0.00011652464, 5.826234e-005, 1.561136e-005};

for (int index = 0; index < 5; index++)
{

float val = roundtoPrecision(a[index], 4);
cout << val << endl;
}
return 0;
}

关于c++ - 如何在 OpenCV 中限制 float 类型的 Mat 精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30612779/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com