2

これは c++ コードです。

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

//Mass center
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 ); 
  }

これは、これまでのところAndroidでの私のコードです。質量中心をアンドロイドに変換できません。

//moments
List<Moments> mu = new ArrayList<Moments>(contours.size());
  for (int i = 0; i < contours.size(); i++) {
    mu.add(i, Imgproc.moments(contours.get(i), false));
  }

//mass center
List<MatOfPoint2f> mc = new ArrayList<MatOfPoint2f>(contours.size()); 
  for( int i = 0; i < contours.size(); i++ ){
    mc.add((mu.get(i).get_m10() / mu.get(i).get_m00() ,   mu.get(i).get_m01()/mu.get(i).get_m00()));
  }

この行のエラー:

mc.add((mu.get(i).get_m10() / mu.get(i).get_m00() , mu.get(i).get_m01()/mu.get(i).get_m00()));

前もって感謝します。

4

3 に答える 3

9

このコードは、すべての輪郭の位置を見つけます。

List<Moments> mu = new ArrayList<Moments>(Contours.size());
    for (int i = 0; i < Contours.size(); i++) {
        mu.add(i, Imgproc.moments(Contours.get(i), false));
        Moments p = mu.get(i);
        int x = (int) (p.get_m10() / p.get_m00());
        int y = (int) (p.get_m01() / p.get_m00());
        Core.circle(rgbaImage, new Point(x, y), 4, new Scalar(255,49,0,255));
    }
于 2013-09-22T16:06:35.077 に答える
1

に輪郭が保存されていると仮定するとList<Point>、次のことができます。

MatOfPoint mop = new MatOfPoint();
mop.fromList(contour);

Moments moments = Imgproc.moments(mop);

Point centroid = new Point();

centroid.x = moments.get_m10() / moments.get_m00();
centroid.y = moments.get_m01() / moments.get_m00();
于 2013-08-21T13:11:59.230 に答える
0

試す

mc.add(new MatOfPoint2f(new Point(mu.get(i).get_m10() / mu.get(i).get_m00(), mu.get(i).get_m01() / mu.get(i).get_m00())));

それ以外の

mc.add((mu.get(i).get_m10() / mu.get(i).get_m00() , mu.get(i).get_m01()/mu.get(i).get_m00()));

mcは型であり、MathOfPoint2fそのコンストラクターにはPoint型パラメーターが必要です。

注: この質問は約 2 年前に尋ねられましたが、これはその C++ コードの正確な変換だと思うので、この回答をします。これは私にとってはうまくいきます。

于 2016-02-10T21:05:35.987 に答える