Kodning eksemplet: filtrering og udtrække de tilsluttede komponenter
Nu vil vi kode den funktion, der vil gøre arbejdet . Jeg vil sende funktionens koden nedenfor her, den fuldstændige arbejdsmiljø koden er tilgængelig i slutningen af artiklen.
CvSeq * konturer, * ptr; CvMemStorage * mem = cvCreateMemStorage (0); cvFindContours (img, mem, & konturer, sizeof (CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint (0,0)); PTR = konturer; mens (ptr = NULL!) {if (kriterier (PTR) == 0) {if (PTR == konturer) {konturer = ptr-> h_next; PTR = konturer; ptr-> h_prev = NULL; } Else {ptr-> h_prev-> h_next = ptr-> h_next; hvis (ptr-> h_next = NULL!) ptr-> h_next-> h_prev = ptr-> h_prev; PTR = ptr-> h_next; }} Else {PTR = ptr-> h_next; }} returnere konturer } Et eksempel på brug I dette eksempel vil jeg vise en simpel funktion, der filtrerer komponenter baseret på deres forhold kun få tilsluttet komponenter, der er næsten kvadratisk. Vi kalder extract_and_filter_CC funktionen som dette: filtered_cc = extract_and_filter_CC (IMG, firkant); Konklusion Denne artikel beskriver en anden anvendelse af tilsluttede komponenter: at filtrere dele af billedet, som ikke passer ind i en række kriterier. Det bruger også funktionspointere at gøre filtreringen som generiske som muligt. Denne teknik er meget kraftfuld og kan bruges i forbindelse med andre teknikker til at fjerne støj et billede eller til at udtrække especial dele af billedet. Den komplette arbejdsmiljø kode med kommentarer er tilgængelig her. CvSeq * extract_and_filter_CC (IplImage * img, int (* kriterier ) (CvSeq *)) {
int firkant (CvSeq * kontur) {CvRect boks = cvBoundingBox (kontur); hvis (box-> m /box-> hw /box-> h> 0,4) tilbagevenden 1; returnere 0;}
OpenCV Tutorial