Advertisement
Guest User

Igor dos Santos Montagne

a guest
Feb 19th, 2010
1,418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <cv.h>
  3. #include <highgui.h>
  4.  
  5. int square(CvSeq *contour)
  6. {
  7.     CvRect box;
  8.     double R;
  9.     box = cvBoundingRect(contour, 0);
  10.     R = 1.0*box.width / box.height;
  11.     if (R > 0.6 && R < 1.4) {
  12.         return 1;
  13.     }
  14.     return 0;
  15. }
  16.  
  17. CvSeq *extract_and_filter_CC(IplImage *img, CvMemStorage **m, int (*criteria) (CvSeq *))
  18. {
  19.     CvSeq *contours, *ptr;
  20.     CvMemStorage *mem = cvCreateMemStorage(0);
  21.     cvFindContours(img, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP,
  22.         CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
  23.     ptr = contours;
  24.     while (ptr != NULL){
  25.         if (criteria(ptr) == 0) {
  26.             if (ptr == contours) {
  27.                 contours = ptr->h_next;
  28.                 ptr = contours;
  29.                 ptr->h_prev = NULL;
  30.             } else {
  31.                 ptr->h_prev->h_next = ptr->h_next;
  32.                 if (ptr->h_next != NULL)
  33.                     ptr->h_next->h_prev = ptr->h_prev;
  34.                 ptr = ptr->h_next;
  35.             }
  36.         } else {
  37.             ptr = ptr->h_next;
  38.         }
  39.     }
  40.     return contours;
  41. }
  42.  
  43. int main(int argc, char *argv[])
  44. {
  45.     IplImage *img, *cc_color; /*IplImage is an image in OpenCV*/
  46.     CvMemStorage *mem;
  47.     CvSeq *contours, *ptr;
  48.     img = cvLoadImage(argv[1], 0); /* loads the image from the command line */
  49.     cc_color = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
  50.  
  51.     cvThreshold(img, img, 150, 255, CV_THRESH_BINARY);
  52.     cvNot(img, img);
  53.     contours = extract_and_filter_CC(img, &mem, square);    
  54.     for (ptr = contours; ptr != NULL; ptr = ptr->h_next) {
  55.         CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );
  56.         cvDrawContours(cc_color, ptr, color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));
  57.     }
  58.     cvSaveImage("result.png", cc_color);
  59.     cvReleaseImage(&img);
  60.     cvReleaseImage(&cc_color);
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement