У меня есть следующий код для рисования самого большого контура. Но кажется, что-то я делаю не так. Пожалуйста посоветуй
if(inputImage.data == NULL)
return HandInfo2();
Mat outputImage = Mat::zeros( inputImage.size(), CV_8UC1);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
vector<Point> largestContour;
int largestArea = -1;
findContours( inputImage, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
/// Approximate contours to polygons
vector<vector<Point> > polyContours( contours.size() );
for( int i = 0; i < contours.size(); i++ )
{
approxPolyDP( Mat(contours[i]), polyContours[i], 3, true );
}
for( int i = 0; i < contours.size(); i++ )
{
int area = fabs(contourArea(polyContours[i],false));
if(area > largestArea && area > size)
{
largestArea = area;
largestContour = polyContours[i];
}
}
Scalar color = Scalar( 255 );
if(largestContour.size()>0)
drawContours( outputImage, largestContour, 0, color, 1, 8, vector<Vec4i>(), 0, Point() );
Когда вызывается drawContours(), я получаю следующую ошибку
Ошибка OpenCV: утверждение не удалось (i ‹ 0) в неизвестной функции, файл ..\..\..\src\opencv\modules\core\src\matrix.cpp, строка 957
Что я здесь делаю неправильно?
largestContour
вы можете просто сохранить индекс самого большого контура, чтобы вам не приходилось копировать контуры несколько раз. Затем вы можете просто получить доступ к самому большому контуру вpolyContours
по его индексу... что вы думаете? - person Quentin Geissmann   schedule 01.11.2012