Sto tentando di utilizzare la funzione findcontours() in OpenCV sull'immagine sottostante.OpenCV findcontours restituisce 2 contorni per ogni cerchio
findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
Quando faccio questa domanda: contours.size()
restituisce 18, in modo che sembra 2 contorno per ogni cerchio. I cerchi sono come si può vedere 1 pixel di spessore, come sono 2 contorni? È uno per esterno e uno per interno, se è così, come posso forzare questa funzione per rilevare un solo contorno per ogni cerchio? Ho pensato che un contorno fosse definito come una sequenza connessa di pixel, 1 pixel di spessore.
Ma quando guardo questo esempio [qui] (http://jmpelletier.com/a-simple-opencv-tutorial/) sembra che non stia contando separatamente l'interno e l'esterno. Ma l'esempio è la versione C dei findcontours. C'è una differenza tra le vecchie e le nuove implementazioni? –
no, non dovrebbero esserci differenze tra la versione C e la versione C++ che influenzerebbero il risultato finale. Infatti da quello che ricordo, uno è solo un involucro per l'altro. Tuttavia, guardando le immagini da quel collegamento, vedo esattamente l'opposto di quello che hai detto. sembra che stia rilevando sia il contorno interno che quello esterno per ciascun cerchio, il che rende ancora più sensato l'immagine mostrata lì – Naps62
In effetti, l'uso del flag CV_RETR_EXTERNAL dovrebbe risolvere il problema. Vedi qui per un elenco completo di flag: http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#void findContours (InputOutputArray image, OutputArrayOfArrays contorni, OutputArray hierarchy, int mode, int metodo, Point offset) –