0

関数 findContours および approxPolyDP を使用して、画像の要素の輪郭を見つけます。このポイントを使用して、drawContours 関数を使用して新しい画像にポリゴンを描画しました。図の重心と主軸を取得するために drawContours 関数によって生成されたすべてのポイントを使用したいのですが、それを行う方法はありますか?

4

1 に答える 1

0

別の画像に輪郭を描く必要はありません。それらをループして、それらのモーメントを計算してから、各モーメントの重心(重心)、主軸角度を計算します。

コード (未テスト):

using namespace cv;
using namespace std;

[...]

// Get contours
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

// Get the moments
vector<Moments> mu(contours.size() );
for( int i = 0; i < contours.size(); i++ ) {
  mu[i] = moments( contours[i], false ); 
}

// Get the mass centers
vector<Point2f> mc( contours.size() );
for( int i = 0; i < contours.size(); i++ ) {
  mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 ); 
}

// Get the angle of the main axis
vector<double> ama( contours.size() );
for( int i = 0; i < contours.size(); i++ ) {
  ama[i] = 0.5*atan2((2*mu[i].mu11),(mu[i].mu20-mu[i].mu02)); //need to be 2 arguments
}

それが役立つことを願っています! 詳細については、次のリンクを参照してください。

于 2012-09-18T07:59:53.490 に答える