我尝试了本书中的示例代码来绘制原始图片中的轮廓。但是,在使用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没有方法大小()。然而,这本书真的写得那样。我错过了什么吗?
答案 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;
}