OpenCV:错误C3861:'finite':找不到标识符

时间:2012-08-23 12:47:05

标签: c++ opencv error-handling background identifier

我正在使用由Julien Pilet等人编写的开源代码。标题为“使背景减法对突然照明变化具有鲁棒性”。我没有改变任何东西,但只是运行它,然后它给了我以下错误:

error C3861: 'finite':identifier not found

我检查了以下行中的“imstat.h”文件中发生此错误:

if (!finite(det) || det<1e-5) {
        sigma_computed=false;
        n=0;
        one_over_sq_det= 1;
        memset(sigma,0,sizeof(sigma));
        sigma[0][0]=1;
        sigma[1][1]=1;
        sigma[2][2]=1;
        two_ln_sq_det = 2;
    } else {
        one_over_sq_det = 1/sqrtf(det);
        assert(finite(one_over_sq_det));
        two_ln_sq_det = 2*log(sqrtf(det));
        sigma_computed=true;
        n = new_n;
    }

“emstat.h”文件包含在“emvisi2.h”文件中。有人可以帮我理解这个错误吗?似乎在某种类定义中存在错误,但我找不到它。谢谢。

1 个答案:

答案 0 :(得分:2)

finite()是一个过时的BSD库函数,您可以在<cmath>的某些(但不是全部)版本中找到它。

如果你有<cmath>的C ++ 11版本或<math.h>的C99版本,则应该有等效的isfinite()。这可能在旧版本的标准库中不可用。

Microsoft似乎也在<float.h>中声明了一个等效的非标准_finite()函数。