1

凸性欠陥のポイントを回復しようとしていますが、関数は整数のみを返します。これらのポイントを見つける方法のヒントを教えてください。

    vector<vector<Point> >hull2( contours.size() );
          vector<vector<int>> hull(contours.size());
std::vector<cv::Vec4i> convexityDefectsSet;    

   for( int i = 0; i < contours.size(); i++ )   {
      convexHull( Mat(contours[i]), hull[i], false );
        convexHull(Mat(contours[i]), hull2[i], false);
      if (contours[i].size() > 3) {
      cv::convexityDefects(Mat(contours[i]), hull[i], convexityDefectsSet);

      for (int cDefIt = 0; cDefIt < convexityDefectsSet.size(); cDefIt++) {

            int startIdx = convexityDefectsSet[cDefIt].val[0];

            int endIdx = convexityDefectsSet[cDefIt].val[1];

            int defectPtIdx = convexityDefectsSet[cDefIt].val[2];

            double depth = static_cast<double>(convexityDefectsSet[cDefIt].val[3]) / 256.0;

            std::cout << startIdx << ' ' << endIdx << ' ' << defectPtIdx << ' ' << depth << '\n' << '\n' << std::endl;

            Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
            Point2f p(defectPtIdx, defectPtIdx);
            circle(frame, p , 10, color, 2, 8, 0 );
        }
      }}
4

2 に答える 2

0

ドキュメントによると:

In C++ and the new Python/Java interface each convexity defect is represented 
as 4-element integer vector [...]: (start_index, end_index, farthest_pt_index, 
fixpt_depth), where indices are 0-based indices in the original contour of 
the convexity defect...

これらは、凸包、つまりcontours[i]変数を生成するために使用された元の輪郭のインデックスに対応します。たとえば、最初の点の座標は次のように取得されます。

cv::Point start = contours.at(startIdx);
于 2013-08-23T11:24:04.810 に答える