Как я могу оценить радиус нерегулярной окружности, которую я обнаружил? я использовал findContours()
чтобы найти, где круги и используются moments()
найти центр масс. Теперь мне просто нужен радиус круга, чтобы я мог оценить его объем.
Для нахождения контуров я использовал следующий код:
findContours(Closed_Image, Contours, Hierarchy,
CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0,0) );
Для нахождения центра масс я использовал следующий код:
vector<Moments> mu(Contours.size() );
b = 0;
for(b = 0; b < Contours.size(); b++)
{
mu[b] = moments(Contours[b], true);
}
vector<Point2f> mc(Contours.size() );
c = 0;
for(c = 0; c < Contours.size(); c++)
{
mc[c] = Point2f(mu[c].m10/mu[c].m00, mu[c].m01/mu[c].m00);
cout << "Contours Centre = " << mc[c] << endl;
}
Я предполагаю, что мне нужно использовать точки контура, хранящиеся в Contours
но форма не является идеальным кругом, поэтому расстояние между каждой точкой контура и его центром масс будет другим. Это просто вопрос усреднения расстояния между центром масс и каждой точкой контура (среднее расстояние = радиус)? Если да, то как я могу на самом деле реализовать это (я не уверен, как получить доступ к данным в vector<vector<Point> > Contours;
). В противном случае, как я смогу добиться оценки радиуса?
(Нажмите здесь для изображения, с которым я работаю)
Центр масс выглядит следующим образом: [424.081, 13.4634], [291.159, 10.4545], [157.833, 10.4286], [24.5198, 8.09127]
Задача ещё не решена.
Других решений пока нет …