I'm using OpenCV 2.4 to calculate the convex hull of a image.
I'm also doing some processing to remove some noise from the image, which is not really relevant to the question.
The code to calculate the convexHull is the following:
...
cv::Mat sourceImage; // assume something is already here please
cv::vector<cv::Vec4i> hierarchy;
std::vector<std::vector<cv::Point> > contours;
cv::findContours( sourceImage, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE,cv::Point(0, 0));
// Find the convex hull object for each contour
vector<cv::vector<cv::Point> >hull( contours.size() );
for (int i = 0; i < contours.size(); i++)
{
convexHull( contours[i], hull[i], false );
}
...
Having both the convexHull and the contours I now want to calculate the convexityDefects of the hull(s), which by looking at opencv documentation I thought it would be like this:
cv::Vec4i defects;
convexityDefects(cv::Mat(contours), hull, defects);
Doing this I get this error:
OpenCV Error: Assertion failed (ptnum > 3) in convexityDefects, file ./opencv/opencv/modules/imgproc/src/contours.cpp, line 1969
Any ideas on what I'm doing wrong when using convexityDefects?
Opencv convexityDefects documentation
Thanks in advance.
UPDATE
Thanks to Innuendo answer I updated the main loop code to:
std::vector<Vec4i> defects;
vector<cv::vector<cv::Point> >hull( contours.size() );
for (int i = 0; i < contours.size(); i++)
{
convexHull( contours[i], hull[i], false );
convexityDefects(contours[i], hull[i], defects[i]);
}
Using this, the error that I now get is:
OpenCV Error: Assertion failed (hull.checkVector(1, CV_32S) > 2) in convexityDefects
See Question&Answers more detail:
os