使用 OpenCV 2 说明书的轮廓示例编译错误

Compile error with the Contours example of OpenCV 2 cookbook

本文关键字:编译 错误 轮廓 OpenCV 说明书 使用      更新时间:2023-10-16

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

 // 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::分配器>>, std::分配器, std::分配器>>>>::erase(__gnu_cxx::__normal_iterator, std::分配器>>*, std::vector, std::分配器>>, std::分配器, std::分配器>>>>>&)'

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

这是因为 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;
}