/c/trimming.c

https://github.com/shisful/Image-OpenCV · C · 71 lines · 58 code · 13 blank · 0 comment · 1 complexity · 90f1288e221512e51f22ef415e296cb5 MD5 · raw file

  1. include <cv.h>
  2. #include <highgui.h>
  3. #include "BlobResult.h"
  4. SV *
  5. xs_labelling(self, inputFIleName, outputFileName)
  6. SV *self;
  7. char *filename;
  8. char *outputFileName;
  9. PREINIT:
  10. IplImage *src_img, *dst_img;
  11. int sum_x, sum_y, x, y, count;
  12. double variance_x, variance_y, avr_x, avr_y;
  13. double *pdImg;
  14. double delta;
  15. int val;
  16. uchar *pSrc, *pDst;
  17. CvMemStorage *storage;
  18. CvHaarClassifierCascade *cascade;
  19. CvSeq *objects;
  20. CvRect *rect;
  21. AV *retval;
  22. HV *hash;
  23. CBlobResult blobs;
  24. CBlob blob;
  25. CvFont font;
  26. CBlob blobWithBiggestPerimeter, blobWithLessArea;
  27. CODE:
  28. int i;
  29. CvPoint p1, p2;
  30. char text[64];
  31. src_img = cvLoadImage (inputFileName, CV_LOAD_IMAGE_COLOR)
  32. dst_img = cvCreateImage (cvSize (src_img->width, src_img->height), IPL_DEPTH_8U, 1);
  33. cvCvtColor (src_img, dst_img, CV_BGR2GRAY);
  34. cvInitFont (&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);
  35. blobs = CBlobResult (dst_img, NULL, 100, false);
  36. blobs.Filter (blobs, B_INCLUDE, CBlobGetArea (), B_INSIDE, 1000, 50000);
  37. for (i = 0; i < blobs.GetNumBlobs (); i++) {
  38. blob = blobs.GetBlob (i);
  39. p1.x = (int) blob.MinX ();
  40. p1.y = (int) blob.MinY ();
  41. p2.x = (int) blob.MaxX ();
  42. p2.y = (int) blob.MaxY ();
  43. cvRectangle (src_img, p1, p2, CV_RGB (255, 0, 0), 2, 8, 0);
  44. sprintf (text, "[%d] %d,%d", blob.Label (), (int) blob.area, (int) blob.Perimeter ());
  45. cvPutText (src_img, text, cvPoint (p1.x, p1.y - 5), &font, cvScalarAll (255));
  46. }
  47. blobs.GetNthBlob (CBlobGetPerimeter (), 0, blobWithBiggestPerimeter);
  48. blobWithBiggestPerimeter.FillBlob (src_img, CV_RGB (0, 255, 0));
  49. blobs.GetNthBlob (CBlobGetArea (), blobs.GetNumBlobs () - 1, blobWithLessArea);
  50. blobWithLessArea.FillBlob (src_img, CV_RGB (0, 0, 255));
  51. cvNamedWindow ("Labeling", CV_WINDOW_AUTOSIZE);
  52. cvShowImage ("Labeling", src_img);
  53. cvWaitKey (0);
  54. cvDestroyWindow ("Labeling");
  55. cvReleaseImage (&src_img);
  56. cvReleaseImage (&dst_img);
  57. return 0;
  58. }