Coding esimerkki: suodatus ja talteen liitettyjen laitteiden
Nyt koodaa toiminto, joka tekee työtä . Laitan funktion alla oleva koodi täällä, täydellinen työ koodi on saatavilla lopussa artikkelin. CvSeq * ääriviivat, * ptr; CvMemStorage * mem = cvCreateMemStorage (0); cvFindContours (img, MEM, ja ääriviivat, sizeof (CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint (0,0)); PTR = ääriviivat; kun taas (PTR! = NULL) {jos (perusteet (PTR) == 0) {jos (PTR == ääriviivat) {ääriviivat = ptr-> h_next; PTR = ääriviivat; ptr-> h_prev = NULL; } Else {ptr-> h_prev-> h_next = ptr-> h_next; jos (ptr-> h_next! = NULL) ptr-> h_next-> h_prev = ptr-> h_prev; PTR = ptr-> h_next; }} Else {PTR = ptr-> h_next; }} palata ääriviivat; } esimerkki käytöstä Tässä esimerkissä näytän yksinkertainen toiminto, joka suodattaa komponentteja perustuu niiden suhde , saada vain liitetty osia, jotka ovat lähes neliö. Vaadimme extract_and_filter_CC toiminto näin: filtered_cc = extract_and_filter_CC (img, neliö); Päätelmä Tässä artikkelissa kuvataan toinen soveltaminen liitettyjen laitteiden: suodattaa kuvan osat, jotka eivät sovi tietyt kriteerit. Se käyttää myös funktio-osoittimia tehdä suodatuksen yleinen kuin mahdollista. Tämä tekniikka on hyvin tehokas ja sitä voidaan käyttää yhdessä muiden tekniikoiden poistaa kohinaa kuvan tai purkaa erityisen kuvan osat. Täydellinen Working koodia kommentteja löytyy täältä. CvSeq * extract_and_filter_CC (IplImage * img, int (* kriteerit ) (CvSeq *)) {
int neliö (CvSeq * ympärys) {CvRect laatikko = cvBoundingBox (ääriviivat); jos (laatikko-> w /laatikko-> HW /laatikko-> h> 0,4) tuotto 1; return 0;}
OpenCV Tutorial