画像の凸包を計算するために OpenCV 2.4 を使用しています。
また、画像からノイズを除去するための処理も行っていますが、これは質問にはあまり関係ありません。
凸包を計算するコードは次のとおりです。
...
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 );
}
...
凸包と輪郭の両方を持っているので、船体の凸性欠陥を計算したいと思います。これは、opencv のドキュメントを見て、次のようになると思いました。
cv::Vec4i defects;
convexityDefects(cv::Mat(contours), hull, defects);
これを行うと、次のエラーが発生します。
OpenCV Error: Assertion failed (ptnum > 3) in convexityDefects, file ./opencv/opencv/modules/imgproc/src/contours.cpp, line 1969
凸性欠陥を使用するときに私が間違っていることについてのアイデアはありますか?
前もって感謝します。
アップデート
Innuendo の回答のおかげで、メイン ループ コードを次のように更新しました。
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]);
}
これを使用すると、私が今得るエラーは次のとおりです。
OpenCV Error: Assertion failed (hull.checkVector(1, CV_32S) > 2) in convexityDefects