как улучшить печать прямоугольников? - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь нарисовать различные прямоугольники на полке, а затем отсортировать и использовать полку в качестве матрицы. Проблема в том, что я не могу нарисовать контур каждого прямоугольника: enter image description here

Мой результат, однако, я хочу, чтобы он был таким: enter image description here

Это мой код:

  public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame{

  Mat img=inputFrame.rgba();
  //bgr to gray
  Imgproc.cvtColor(img,gray,Imgproc.COLOR_BGR2GRAY,0);
   // apply canny
  Imgproc.Canny(gray,gray,100,255,3,true);

  Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, kernelSize);
  //apply dilate
  Imgproc.dilate(gray, gray, kernel);

  Imgproc.GaussianBlur(gray, gray, new Size(3,3), 0);

  List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 
  Imgproc.findContours(gray, contours, hierarchy, Imgproc.RETR_TREE,Imgproc.CHAIN_APPROX_SIMPLE);
    MatOfPoint2f approxCurve = new MatOfPoint2f();
  // List of rect used for sort
  List<Point> rect_pnt=new ArrayList<Point>();
   //comparator for sorted
    Comparator<Point> comp=new Comparator<Point>() {
    // compare method 
        @Override
        public int compare(Point o1, Point o2) {

            int result= new Integer((int) o1.x).compareTo((int) o2.x);

            if(result==0){

                result = new Integer((int)o1.y).compareTo((int) o2.y);

            }

            return result;

        }

    };

 //For each contour found

    for(int i=0;i<contours.size();i++){

        int j=0;

        //convert contours(i) from MatOfPoint to MatOfPoint2f

        MatOfPoint2f contour2f= new MatOfPoint2f(contours.get(i).toArray());

        double approxDistance=Imgproc.arcLength(contour2f,true)*0.05;

        Imgproc.approxPolyDP(contour2f,approxCurve,approxDistance,true);

        //convert back to MatOfPoint

        MatOfPoint points= new MatOfPoint(approxCurve.toArray());

        //Get bounding rect of contour

        Rect rect = Imgproc.boundingRect(points);

        //draw enclosing rectangle

        if(rect.height>400&&rect.width>400) {
            // if here add rect in list and draw rectangle
            rect_pnt.add(j,rect.tl());
            Imgproc.rectangle(img, rect.tl(), rect.br(), new Scalar(0, 0, 255), 4);
            j++;
        }
    }
    // sort of rect
    Collections.sort(rect_pnt,comp);
    System.out.println("Rectangle sorted:" + rect_pnt);

  return img;
}

Итак, я хотел бы напечатать все прямоугольники на полках, но теперь я печатаю только один.

Можетты мне помогаешь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...