我想按区域过滤图像(网络摄像头)的轮廓。我使用findContours(),然后使用approxPolyDP()将它们转换为闭合多边形。之后我想用它的区域过滤它们(一个用“有用”轮廓生成另一个结构的函数)用这个函数:
std::vector<vector<Point> > _filterByArea(double minArea,double maxArea,const std::vector<vector<Point> > contours){
size_t ncontours=contours.size();
size_t useful_contours=0;
size_t i,j;
double area;
std::vector<vector<Point> > filtered_contours;
for(i=0;i<ncontours;i++){
area=contourArea(contours[i],false);
if(area>minArea && area<maxArea){
useful_contours++;
}
}
filtered_contours.resize(useful_contours);
useful_contours=0;
for(i=0;i<ncontours;i++){
double area=contourArea(contours[i],false);
size_t contour_size=contours[i].size();
if(area>minArea && area<maxArea){
for(j=0;j<contour_size;j++){
//filtered_contours[useful_contours].resize(contour_size);
filtered_contours.at(useful_contours).push_back(contours.at(i).at(j));
//filtered_contours.insert(filtered_contours.begin(),contours.at(i).begin(),contours.at(i));
}
useful_contours++;
}
}
return filtered_contours;
}
但是在运行它时崩溃并出现以下错误:
OpenCV错误:断言失败(contour.checkVector(2)&gt; = 0&amp;&amp;(contour.depth()== CV_32F || contour.depth()== CV_32S))在contourArea,file / tmp中/buildd/opencv-2.3.1/modules/imgproc/src/contours.cpp,第1673行 在抛出'cv :: Exception'的实例后终止调用 what():/ tmp/buildd/opencv-2.3.1/modules/imgproc/src/contours.cpp:1673:错误:(-215)contour.checkVector(2)&gt; = 0&amp;&amp;函数contourArea中的(contour.depth()== CV_32F || contour.depth()== CV_32S)
尝试不同的东西和代码我发现错误在行区域= contourArea(contours [i],false);,这对我来说非常明显但不是很明显,因为我尝试了类似的(同样的() )之前的代码(但不是在函数中,而是在main()中),它完美地工作。我做错了什么?
提前致谢!