Я пытаюсь нарисовать границу вокруг символов на изображении ниже. Однако, поскольку некоторые персонажи объединены, я не могу нарисовать прямоугольник. Я пробовал несколько вещей, таких как; расширяя, размывая и пробуя разные пятна, но я не могу их разделить. Разрушение, кажется, лучший способ приблизиться, но если я продолжу размывать, символы не могут быть распознаны.
Я использую библиотеку OpenCV в Java для достижения этой цели.
Mat img = Imgcodecs.imread("test.jpg");
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.cvtColor(img, img, Imgproc.COLOR_BGR2GRAY);
Imgproc.threshold(img, img, 220, 255, 0);
Imgproc.erode(img, img, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3)));
Imgproc.findContours(img, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);
MatOfPoint2f approxCurve = new MatOfPoint2f();
//For each contour found
for (int i = 0; i < contours.size(); i++) {
MatOfPoint2f contour2f = new MatOfPoint2f(contours.get(i).toArray());
double approxDistance = Imgproc.arcLength(contour2f, true) * 0.02;
Imgproc.approxPolyDP(contour2f, approxCurve, approxDistance, true);
MatOfPoint points = new MatOfPoint(approxCurve.toArray());
Rect rect = Imgproc.boundingRect(points);
Imgproc.rectangle(img, rect.tl(), rect.br(), new Scalar(255, 255, 255), 1, 8, 0);
}
System.out.println(img);
Imgcodecs.imwrite("o.jpg", img);
До:
![https://i.imgur.com/qiTwfnx.png](https://i.stack.imgur.com/A49d6.png)
После того, как:
![https://i.imgur.com/ekjbWNs.png](https://i.stack.imgur.com/oPb1k.png)