2015-02-13 2 views
0
vector<Point> pointsInterest; 
     Mat_<uchar>::iterator itMask= mask.begin<uchar>();//mask is a Mat 
     Mat_<uchar>::iterator end= mask.end<uchar>(); 
     for(; itMask!=end; ++itMask) 
      if(*itMask==255) 
       pointsInterest.push_back(itMask.pos()); 

     RotatedRect minRect = minAreaRect(pointsInterest); 

мне нужна реализация Java кодаНекоторые проблемы с преобразования OpenCV C++ код в Java

+0

что вы пытаетесь для того чтобы достигнуть с маской? в общем, вам лучше ** не ** попробовать то же самое в java, нет итераторов, и все, что сделано * на пиксель *, очень медленно. – berak

ответ

0

В то же время мы делаем то же самое! :) Несколько дней назад я нашел где-то в Интернете аналогичную проблему с решением.

Вот решение:

ArrayList<Point> pointsInterestList = new ArrayList<Point>(); 

    for (int j = 0; j < mask.rows(); j++) { 
     for (int k = 0; k < mask.cols(); k++) { 
      double[] pixel = mask.get(j, k); 

      if (pixel[0] == 255) { 
       //add Point of Mat to list of points 
       Point point = new Point(k, j); 
       pointsInterestList.add(point); 
      } 
     } 
    } 

    // System.out.println("PointsInteresedList: "+pointsInterestList); 

    MatOfPoint2f m2fFromList = new MatOfPoint2f(); 
    m2fFromList.fromList(pointsInterestList); //create MatOfPoint2f from list of points 
    MatOfPoint2f m2f = new MatOfPoint2f(); 
    m2fFromList.convertTo(m2f, CvType.CV_32FC2); //convert to type of MatOfPoint2f created from list of points 


    RotatedRect minRect = Imgproc.minAreaRect(m2f); 
+0

Спасибо за ответ =) Вы работаете в распознавании номерных знаков? –

Смежные вопросы