1

この本のサンプルコードを試して、元の画像に輪郭を描きました。ただし、次のコードは、Mingw4.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 >>、std :: allocator、std ::allocator>>の呼び出しに一致する関数がありません>> :: Erase(__ gnu_cxx :: __ normal_iterator、std :: allocator >> *、std :: vector、std :: allocator >>、std :: allocator、std :: allocator >> >> >>&) '

itcにはメソッドsize()がないということです。しかし、本は本当にそのように書いています。私は何か見落としてますか?

4

1 に答える 1

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;
}
于 2012-07-03T13:26:22.097 に答える