使用OpenCV 2 cookbook的Contours示例编译错误

时间:2012-07-03 13:08:25

标签: c++ opencv

我尝试了本书中的示例代码来绘制原始图片中的轮廓。但是,在使用Mingw 4.4的Qt下,以下代码无法成功编译。

 // Eliminate too short or too long contours
   int cmin= 100;  // minimum contour length
   int cmax= 1000; // maximum contour length
   std::vector<std::vector<cv::Point> >::
              const_iterator itc= contours.begin();
   while (itc!=contours.end()) {
      if (itc->size() < cmin || itc->size() > cmax)
         itc= contours.erase(itc);
      else 
         ++itc;
   }

警告:有符号和无符号整数表达式之间的比较 警告:有符号和无符号整数表达式之间的比较 错误:没有匹配函数来调用'std :: vector,std :: allocator&gt; &gt;,std :: allocator,std :: allocator&gt; &GT; &GT; &gt; :: erase(__ gnu_cxx :: __ normal_iterator,std :: allocator&gt;&gt; *,std :: vector,std :: allocator&gt;&gt;,std :: allocator,std :: allocator&gt;&gt;&gt; &gt;&gt;&amp;)'

它说itc没有方法大小()。然而,这本书真的写得那样。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

这是因为std::vector::erase会返回iterator,而您正在分配给const_iterator。这编译:

...
std::vector<std::vector<cv::Point> >::iterator itc= contours.begin();
                                       // ^
while (itc!=contours.end()) {
   if (itc->size() < cmin || itc->size() > cmax)
       itc= contours.erase(itc);
   else 
       ++itc;
}