2

次のコードを使用して、opencvを使用してオブジェクトのモーメントと位置を計算しています。

// calc object moments
CvMoments *moments = (CvMoments*) malloc(sizeof(CvMoments));
cvMoments(threshy, moments, 1);

// get the moment values
double moment10 = cvGetSpatialMoment(moments, 1, 0);
double moment01 = cvGetSpatialMoment(moments, 0, 1);
double area = cvGetCentralMoment(moments, 0, 0);

// save the X and Y position from previous iteration.
int lastX = currentX;
int lastY = currentY;

// calculate the new X and Y positions.
currentX = moment10/area;
currentY = moment01/area;

シーンにオブジェクトが1つしかない限り、これはうまく機能します。ただし、複数のオブジェクトがあり、すべてのオブジェクトの中点になる場合currentXcurrentY

各オブジェクトのモーメント(および座標)を計算する方法はありますか?

4

1 に答える 1

2

そのためにcountoursを使用する必要があります。C ++ apiの場合、cv :: findContoursという関数があり、しきい値処理された画像を渡します。その後、各カウント/オブジェクトのモーメントを計算します。詳細については、 OpenCVのドキュメントを参照してください。

于 2012-09-25T12:18:13.023 に答える