Я пытаюсь нарисовать различные прямоугольники на полке, а затем отсортировать и использовать полку в качестве матрицы. Проблема в том, что я не могу нарисовать контур каждого прямоугольника: ![enter image description here](https://i.stack.imgur.com/XqGkR.jpg)
Мой результат, однако, я хочу, чтобы он был таким: ![enter image description here](https://i.stack.imgur.com/HP1cb.jpg)
Это мой код:
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;
}
Итак, я хотел бы напечатать все прямоугольники на полках, но теперь я печатаю только один.
Можетты мне помогаешь?