Preenchendo buracos dentro de um objeto binário
Eu tenho um problema com o preenchimento de buracos brancos dentro de moedas pretas para que eu possa ter apenas 0-255 imagem binária com moedas pretas cheias .. Eu usei filtro Median para realizá-lo, mas nesse caso ponte de conexão entre moedas cresce e é impossível para reconhecê-los depois de várias épocas de erosão ... Então, eu preciso de um método floodFill simples em opencv
Aqui está a minha imagem com buracos:
EDITAR: A função do tipo floodfill deve preencher buracos em componentes grandes sem avisar as coordenadas X, Y como uma semente ...
EDIT: eu tentei usar a função cvDrawContours, mas eu não preenche os contornos dentro dos maiores.
Aqui está o meu código:
<code> 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); </code>
Resultado: (você pode ver buracos negros dentro de cada moeda)