findcontours opencv中的分段错误
segmentation fault in findcontours opencv
我正在尝试检测一个球并为其划定边界。它显示错误
segmentation fault (core dumped)
错误就在这里,
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
Mat itt = Mat::zeros( imgThresholded.size(), CV_8UC1 );
itt = imgThresholded*255;
Canny( itt ,itt, 10, 30, 3 );
vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
vector<Rect> boundRect( contours.size() );
imshow("canny", itt);
//CIRCLE HOUGH
//vector<Vec3f> circles;
findContours( itt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
for( int i = 0; i < contours.size(); i++ )
{
Scalar color = Scalar(255,255,255);
if( contours[i].size() > points )
{approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
boundRect[i] = boundingRect( Mat(contours_poly[i]) );
minEnclosingCircle( (Mat)contours_poly[i], center[i], radius[i] );
circle( imgOriginal, center[i], (int)radius[i],color, 2, 8, 0 );
}
}
我无法理解哪里有段错误。
你先做
向量 boundRect( contours.size() );
在这里,轮廓仍然是空的。
然后调用 findContours,它计算并设置轮廓的大小,
然后你尝试直接将它写入 boundRect[i].
只需调用 boundRect.push_back(boundingRect( Mat(contours_poly[i]) ) );相反,那你应该没问题。
如果你正在做原型代码,通常调试使用 boundRect.at(i) = ... 会更好,因为这会给你一个可以理解的错误,比如 "out of range".
在 findContours 之后声明其他向量,如下所示。如需进一步参考,您可以查看 。希望这可以解决您的错误。我遇到了同样的错误,并在我提到的 link 中找到了解决方案。
findContours( itt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
vector<Rect> boundRect( contours.size() );
我正在尝试检测一个球并为其划定边界。它显示错误
segmentation fault (core dumped)
错误就在这里,
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
Mat itt = Mat::zeros( imgThresholded.size(), CV_8UC1 );
itt = imgThresholded*255;
Canny( itt ,itt, 10, 30, 3 );
vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
vector<Rect> boundRect( contours.size() );
imshow("canny", itt);
//CIRCLE HOUGH
//vector<Vec3f> circles;
findContours( itt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
for( int i = 0; i < contours.size(); i++ )
{
Scalar color = Scalar(255,255,255);
if( contours[i].size() > points )
{approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
boundRect[i] = boundingRect( Mat(contours_poly[i]) );
minEnclosingCircle( (Mat)contours_poly[i], center[i], radius[i] );
circle( imgOriginal, center[i], (int)radius[i],color, 2, 8, 0 );
}
}
我无法理解哪里有段错误。
你先做 向量 boundRect( contours.size() ); 在这里,轮廓仍然是空的。 然后调用 findContours,它计算并设置轮廓的大小, 然后你尝试直接将它写入 boundRect[i].
只需调用 boundRect.push_back(boundingRect( Mat(contours_poly[i]) ) );相反,那你应该没问题。
如果你正在做原型代码,通常调试使用 boundRect.at(i) = ... 会更好,因为这会给你一个可以理解的错误,比如 "out of range".
在 findContours 之后声明其他向量,如下所示。如需进一步参考,您可以查看
findContours( itt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
vector<Rect> boundRect( contours.size() );