Заполнение отверстий внутри бинарного объекта

У меня проблема с заполнением белых отверстий внутри черных монет, так что у меня может быть только двоичное изображение 0 -255 с заполненными черными монетами. Я использовал Медианный фильтр, чтобы выполнить это но в этом случае мост связи между монетами растет, и после нескольких раз эрозии их становится невозможно распознать... Поэтому мне нужен простой метод, подобный наводнению, в opencv

Вот мое изображение с дырками:

enter image description here

РЕДАКТИРОВАТЬ:Подобная функция заливки должна заполнять дыры в больших компонентах, не запрашивая координаты X,Y в качестве начального значения...

РЕДАКТИРОВАТЬ :Я пытался использовать функцию cvDrawContours, но я не закрашиваю контуры внутри больших компонентов.

Вот мой код:

        CvMemStorage mem = cvCreateMemStorage(0);
        CvSeq contours = new CvSeq();
        CvSeq ptr = new CvSeq();
        int sizeofCvContour = Loader.sizeof(CvContour.class);

        cvThreshold(gray, gray, 150, 255, CV_THRESH_BINARY_INV);

        int numOfContours = cvFindContours(gray, mem, contours, sizeofCvContour, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
        System.out.println("The num of contours: "+numOfContours); //prints 87, ok

        Random rand = new Random();
        for (ptr = contours; ptr != null; ptr = ptr.h_next()) {
            Color randomColor = new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
            CvScalar color = CV_RGB( randomColor.getRed(), randomColor.getGreen(), randomColor.getBlue());
            cvDrawContours(gray, ptr, color, color, -1, CV_FILLED, 8);
        }
        CanvasFrame canvas6  = new CanvasFrame("drawContours");
        canvas6.showImage(gray);

Результат:(вы можете видеть черные дыры внутри каждой монеты)

enter image description here

28
задан Zaur Guliyev 25 April 2012 в 16:03
поделиться