今天我去按照OpenCV2 cookbook上面去做轮廓提取的时候发现编译不通过!查了好久居然没发现什么错!后来Google 了一下发现了!
原文:Here
OpenCV2 cookbook P184 源代码:
原文:Here
OpenCV2 cookbook P184 源代码:
1 2 3 4 5 6 7 8 9 10 11 | // 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; } |
不知道大家看没看出这段代码的问题!!我一开始也没看到
问题主要出在const_iterator这里既然后来要erase 怎么可能使用const_iterator呢?
所以应该取消const
但是我用MinGW编译的时候发现,第2、3行也无法通过。估计是size_type和int不兼容吧!所以最后只好这样了!
问题主要出在const_iterator这里既然后来要erase 怎么可能使用const_iterator呢?
所以应该取消const
但是我用MinGW编译的时候发现,第2、3行也无法通过。估计是size_type和int不兼容吧!所以最后只好这样了!
1 2 3 4 5 6 7 8 9 10 11 12 | // Eliminate too short or too long contours std::vector<std::vector<cv::Point> >::size_type cmin = 100; // minimum contour length std::vector<std::vector<cv::Point> >::size_type cmax = 1000; // maximum contour length std::vector<std::vector<cv::Point> >::iterator itc = contours.begin(); cout << contours.size() << endl; while (itc != contours.end()) { if (itc->size() < cmin || itc->size() > cmax) itc = contours.erase(itc); else ++itc; } |
最后希望看过这本书的人能够纠正这个问题!!!