0

私は赤い部分を見つける必要があるコードを開発しています。minEnclosingCircle画像の中心を取得するためにこの関数を使用してい ます。

関数が中心を与える方法は、ベクトル形式ですvector<Point2f>center( contours.size() );。ただし、関心領域(ROI)を決定するには、このデータが必要です。ポイントからデータを抽出して、XとYの2つの座標を整数にする方法はありますか?

ありがとう!

- アップデート -

私がやりたいことをよりよく説明するために、いくつかのコードを投稿します。

vector<vector<Point> > contours_poly( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );


for( int i = 0; i < contours.size(); i++ )
{   
    approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
    minEnclosingCircle( (Mat)contours_poly[i], center[i], radius[i] );
 }

したがって、画像から輪郭を取得したら、関数を適用しminEnclosingCicrleて中心を決定します。私はOpenCVの初心者です。見つけた円の中心は、このPoint2fのベクトルに保存されていると思います。私がやりたいのは、オブジェクトの位置を取得してオブジェクトの周囲のROIを決定するために、このポイントにアクセスすることです。

4

3 に答える 3

4

あなたのコメントから

20個の円を取得し、円15が最大であることがわかっているとします。中心[15]のXとYの位置を知りたいのですが、これはpoint2fですが、ベクトルの内側にあります。

境界チェックなし:

float x = center[15].x;
float y = center[15].y;

境界チェックあり:

float x = center.at(15).x;
float y = center.at(15).y;

ベクトルの範囲に関して、インデックスがの場合、>= center.size()範囲外です。したがって、自分でチェックを行うことができます。

 int idx = 15;
 if (idx < center.size())
 {
   // OK to access with index 15
 }

インデックス付けはで始まることに注意してください0。したがって、ここでは16番目のポイントにアクセスしています。

于 2013-03-21T10:39:47.280 に答える
0

IDEを使用している場合は、次のように入力できます。

Point2f p;
p.

IDEは、クラスの適切なフィールドに入力するのに役立ちます。

スマートオートコンプリートなしでプログラムを作成した場合は、opencvのソースコードを調べるだけで確認できます(コードのこの部分はopencvソースからのものであり、opencv Webサイトおよびソースコードにあるライセンスの下で配布されます)。

typedef Point_<float> Point2f;
....
template<typename _Tp> class CV_EXPORTS Point_{
....
    _Tp x, y; //< the point coordinates
于 2013-03-21T09:28:09.873 に答える
0

minEnclosingCircleは、中心をPoint2fと半径として返しますが、ベクトルを取得する方法がわかりません。

いずれの場合も、Point2fはパブリックメンバーであるため、その座標に直接アクセスできます。

Point2f a;
int x = (int)a.x;
int y = (int)a.y;
于 2013-03-21T09:28:39.363 に答える