2012-07-03 44 views
1

我嘗試了本書中的示例代碼在原始圖片中繪製輪廓。但是,下面的代碼在Mingw 4.4下不能在Qt下成功編譯。用OpenCV 2食譜的輪廓示例編譯錯誤

// 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 ::矢量沒有匹配的函數,標準::分配器>>,標準: :分配器,std :: allocator>>>> :: erase(__ gnu_cxx :: __ normal_iterator,std :: allocator>> *,std :: vector,std :: allocator>,std :: allocator,std :: allocator> >>>> &)'

它表示itc沒有方法大小()。但是,這本書確實是這樣寫的。我錯過了什麼?

回答

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; 
} 
+0

這個工程。謝謝! – user957121