opencv:C2668:' cvRound':对重载函数的模糊调用

时间:2018-02-07 21:06:52

标签: opencv

我在Qt5.7中使用opencv3.2。以下是我的代码的一部分:

  for(int i=0;i<contour[0].size();i++)
  {
    if(contour[0][i].x>xmax) xmax = contour[0][i].x;
    if(contour[0][i].x<xmin) xmin = contour[0][i].x;
    if(contour[0][i].y>ymax) ymax = contour[0][i].y;
    if(contour[0][i].y<ymin) ymin = contour[0][i].y;
  }
  int step = cvRound(contour[0].size()/16); #this line causes the error

构建错误是:

error C2668: 'cvRound': ambiguous call to overloaded function
C:\opencv-3.2.0\mybuild\include\opencv2/core/fast_math.hpp(232): note: could be 'int cvRound(int)'
C:\opencv-3.2.0\mybuild\include\opencv2/core/fast_math.hpp(201): note: or       'int cvRound(float)'
C:\opencv-3.2.0\mybuild\include\opencv2/core/fast_math.hpp(93): note: or       'int cvRound(double)'

有人可以帮忙解决错误吗?

2 个答案:

答案 0 :(得分:1)

尝试转换Round的参数。你可以在它们前写(浮动)。这样,您可以帮助编译器找到正确的Round函数(例如,采用float参数的函数)

答案 1 :(得分:0)

我通过更改:

解决了这个问题
int step = cvRound(contour[0].size()/16);

为:

int step = cvRound((double)contour[0].size()/16);