Центр масс OpenCV

Я нашел центр масс неправильной формы, но теперь мне нужно вычислить расстояние до любой заданной точки.
Я понимаю, что mc — это вектор точек, но как мне найти координаты mc, чтобы я мог рассчитать расстояние между центром масс и какой-то другой точкой. Спасибо

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 );
}

2

Решение

Сначала вы должны получить точку по индексу. Позволять :

int size = contours.size();

Индексы: i = 0 ... size , Точка индекса i является

mc[i];

Координаты этой точки могут быть достигнуты:

float xCoor = mc[i].x;
float yCoor = mc[i].y;

Конечно, вы можете прочитать эти значения в цикле из i = 0 to size если вы хотите прочитать все координаты всех mc точки.

Редактировать:
Я предполагал, что вы знаете, как найти центр масс, и просто спрашивал, как получить координаты. Но если вы хотите получить центр масс и расстояние от центра масс до некоторой другой точки, то вы можете сделать следующее:

float distance;
float totalX=0.0, totalY=0.0;
for(int i=0; i<size; i++) {
totalX+=mc[i].x;
totalY+=mc[i].y;
}

Point2f massCenter(totalX/size, totalY/size); // condition: size != 0
Point2F someOtherPoint(someXVal, someYVal);

distance = massCenter.distance(someOtherPoint);

это расстояние от центра масс до другой точки.

Надеюсь, это поможет!

6

Другие решения

mc[i].x а также mc[i].y координаты x и y точки индекса i.

Чтобы вычислить центр масс:

cv::Point2f baricenter(0,0);
for( int i = 0; i < mc.size(); i++ )
barycenter += mc[i];
barycenter.x /= mc.size();
barycenter.y /= mc.size();

Убедитесь, что у вас есть хотя бы одна точка в вашем векторе.

1

По вопросам рекламы [email protected]