3

私は最近、OpenCV での C インターフェイスの使用から C++ インターフェイスの使用に変更しました。C インターフェースには、C++ インターフェースにはないように見えるさまざまな機能がありました。これらの問題の解決策を知っている人はいますか:

1) C インターフェイスには、Contour Scanner と呼ばれるオブジェクトがありました。画像の輪郭を1つずつ見つけるために使用されました。C ++でこれを行うにはどうすればよいですか? 一度にすべての輪郭を見つけるのではなく、一度に 1 つずつ見つけたいと思います。

2) CvSeqC では輪郭を表すために使用されていましたが、C++ ではvector <vector<Point> >が使用されます。CI では、 を使用して次の輪郭にアクセスできましたh_next。に相当する C++ は h_next何ですか?

4

1 に答える 1

10

一度に 1 つずつ輪郭を取得できるかどうかはわかりません。ただし、 がある場合は、vector<vector<Point> >次のように各輪郭を反復処理できます。

using namespace std;

vector<vector<Point> > contours;

// use findContours or other function to populate

for(size_t i=0; i<contours.size(); i++) {
   // use contours[i] for the current contour
   for(size_t j=0; j<contours[i].size(); j++) {
      // use contours[i][j] for current point
   }
}

// Or use an iterator
vector<vector<Point> >::iterator contour = contours.begin(); // const_iterator if you do not plan on modifying the contour
for(; contour != contours.end(); ++contour) {
   // use *contour for current contour
   vector<Point>::iterator point = contour->begin(); // again, use const_iterator if you do not plan on modifying the contour
   for(; point != contour->end(); ++point) {
      // use *point for current point
   }
}

したがって、についての質問によりよく答えるためにh_next。のイテレータ を指定itするvectorと、次の要素は になりますit+1。使用例:

vector<vector<Point> >::iterator contour = contours.begin();
vector<vector<Point> >::iterator next = contour+1; // behavior like h_next
于 2011-11-21T01:59:41.183 に答える