2017-04-20 18 views
1

輪郭の固定点(マス中心(mc(i))から輪郭の点までの距離をcoloumn [i]に持つ行列を作成します[私]。輪郭から点までの距離を求めるopencv C++

これは私が輪郭と質量の中心を見つけるコードです:

findContours(binMat, contours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE,Point(0,0)); 

/// Get the moments 
vector<Moments> mu(contours.size()); 
for (int i = 0; i < contours.size(); i++) 
{ 
    mu[i] = moments(contours[i], false); 
} 

/// Get the mass centers 
vector<Point2f> mc(contours.size()); 
for (int i = 0; i < contours.size(); i++) 
{ 
    mc[i] = Point2d(mu[i].m10/mu[i].m00, mu[i].m01/mu[i].m00); 
} 

このコードがうまく機能しています。

次に、私は距離を見つけるために多くの方法を試しましたが、私はC++で新しいプログラミングを行いOpenCVを使用しているので多くの問題があります。

答えて

1
for (int i = 0; i < contours.size(); i++) 
{ 
    mc[i] = Point2d(mu[i].m10/mu[i].m00, mu[i].m01/mu[i].m00); 

    KeyPoint k; 
    k.pt = mc[i]; 

    float d = (k.pt.x,k.pt.y, centerX,centerY); 
} 

、高速応答のために2ポイント

float distance(int x1, int y1, int x2, int y2) 
{ 

    float d = sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)); 

    return d; 
} 
+1

ありがとう、イブラヒム!!あなたのアドバイスは役に立ちました。私はこのように問題を解決しました: 'ベクトル mc(contours.size()); \t raggio.resize(contours.size()); \t { \t \t MC [I] =たPoint2D(MU [I] .m10/MU [I] .m00、ミュー[I](; iが(contours.sizeを<)I ++は、I = 0の整数)ため \t .m01/mu [i] .m00); \t \t KeyPoint center; \t \t center.pt = mc [i]; \t \t raggio [i] .resize(contours [i] .size()); (; J <輪郭[I] .size(); INT J = 0 J ++)用 \t \t \t \t { \t \t \tキーポイントK。 \t \t \t k.pt = contours [i] [j]; \t \t \t float d =距離((int)center.pt.x、(int)center.pt.y、(int)k.pt.x、(int)k.pt.y); raggio [i] [j] = d;\t \t \t \t \t} \t} –

1

openCVにはこのための機能があります。 pointPolygonTest

+0

おかげAidenhjjの間の距離を計算する機能!私はその機能を試してみましたが、それは機能しますが、輪郭の各点から質量中心までの距離をすべて知る必要があります。代わりに、この関数は、輪郭の最も近い点からの距離のみを返します。 –

+0

だから、すべての点のxとyのプロパティを取得し、xとyの中心を引いてから、古いPythagorasを使って距離を見つけてください。 – Aidenhjj

+0

これがポイントです!私は既にこのプロジェクトをMatlabでやっていますが、そこでは "良い古いPythagoras"を使用しました:)実際には、C++/openCVで初めてプログラムするので、xプロパティとyプロパティを取得する方法がわかりません。 –

関連する問題