検出した不規則な円の半径を推定するにはどうすればよいですか? 私は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
が、形状は完全な円ではないため、輪郭の各点とその重心との間の距離は異なります。これは、重心と輪郭の各点の間の距離を平均するだけの問題ですか (平均距離 = 半径)? もしそうなら、どうすれば実際に実装できますか(.inのデータにアクセスする方法がわかりませんvector<vector<Point> > Contours;
)。そうでなければ、どのようにして半径を推定することができますか?
(私が取り組んでいる画像については、ここをクリックしてください)
重心は次のとおりです。[424.081, 13.4634], [291.159, 10.4545], [157.833, 10.4286], [24.5198, 8.09127]