Guest User

Untitled

a guest
May 20th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. // opencv
  4. #include <highgui.h>
  5. #include <cv.h>
  6.  
  7. const char* cascade_path = "/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml";
  8. CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad(cascade_path, 0, 0, 0 );
  9. //CvHaarClassifierCascade* cascade = cvLoadHaarClassifierCascade(cascade_path, cvSize(1,1));
  10. CvMemStorage* storage = cvCreateMemStorage( 0 );
  11.  
  12. void
  13. detect_and_draw( IplImage* img, double scale = 1.4 )
  14. {
  15. IplImage* gray = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
  16. IplImage* small_img = cvCreateImage(
  17. cvSize(cvRound(img->width/scale), cvRound(img->height/scale)),
  18. IPL_DEPTH_8U,
  19. 1 );
  20. cvCvtColor( img, gray, CV_BGR2GRAY );
  21. cvResize( gray, small_img, CV_INTER_LINEAR );
  22. cvEqualizeHist( small_img, small_img );
  23.  
  24. // Detect objects
  25. cvClearMemStorage( storage );
  26. CvSeq* objects = cvHaarDetectObjects( small_img,
  27. cascade,
  28. storage,
  29. 1.1,
  30. 2,
  31. 0,
  32. cvSize(30, 30) );
  33. // loop through found objects and draw boxes around them
  34. CvScalar color[] = {{255,0,0}, {0,255,0}};
  35. /*
  36.  
  37. // if ( objects->total < 2 ) {
  38. // return;
  39. // }
  40.  
  41. CvRect* face_rec1 = (CvRect*) cvGetSeqElem( objects, 0 );
  42. CvMat *face_mat1, x;
  43. face_mat1 = cvGetSubRect(img,
  44. &x,
  45. cvRect(face_rec1->x, face_rec1->y, face_rec1->width, face_rec1->height));
  46. IplImage* face_img1 = cvCreateImage( cvGetSize(&x), IPL_DEPTH_8U, 1 );
  47. cvCopy(face_mat1, face_img1);
  48.  
  49. // CvRect* face_rec2 = (CvRect*) cvGetSeqElem( objects, 1 );
  50. // cvGetSubRect(img,
  51. // face_rec2,
  52. // cvRect(face_rec2->x, face_rec2->y, face_rec2->width, face_rec2->height));
  53. */
  54.  
  55. for( int i = 0; i < (objects ? objects->total : 0); i++ ) {
  56. CvRect* rec = (CvRect*) cvGetSeqElem( objects, i );
  57. int x = rec->x * scale; int x2 = (rec->x + rec->width) * scale;
  58. int y = rec->y * scale; int y2 = (rec->y + rec->height) * scale;
  59. cvRectangle( img,
  60. cvPoint(x, y),
  61. cvPoint(x2, y2),
  62. color[i % 2]);
  63. }
  64.  
  65. cvReleaseImage( &gray );
  66. cvReleaseImage( &small_img );
  67. }
  68.  
  69.  
  70. /* VIDEO */
  71. int
  72. main( int argc, char** argv )
  73. {
  74. cvNamedWindow( "Example", CV_WINDOW_AUTOSIZE );
  75. CvCapture* capture;
  76. capture = cvCreateCameraCapture( 0 );
  77. // capture = cvCreateFileCapture( argv[1] );
  78.  
  79. IplImage* frame;
  80. while(1) {
  81. frame = cvQueryFrame( capture );
  82. if ( !frame ) continue;
  83.  
  84. /* edge detection
  85. IplImage* out = cvCreateImage( cvGetSize(frame) , IPL_DEPTH_8U, 1 );
  86. IplImage* gray = cvCreateImage( cvGetSize(frame) , IPL_DEPTH_8U, 1 );
  87.  
  88. cvCvtColor( frame, gray, CV_BGR2GRAY );
  89. cvCanny( gray, out, 10, 100, 3 );
  90. cvShowImage( "Example", out );
  91.  
  92. cvReleaseImage( &out );
  93. cvReleaseImage( &gray );
  94. */
  95.  
  96. detect_and_draw( frame );
  97. cvShowImage( "Example", frame );
  98.  
  99. char c = cvWaitKey( 33 );
  100. if ( c == 27 ) break;
  101. }
  102. cvReleaseCapture( &capture );
  103. cvDestroyWindow ( "Example" );
  104. return 0;
  105. }
  106.  
  107.  
  108. /* IMAGE
  109. int
  110. main( int argc, char** argv )
  111. {
  112. IplImage* img = cvLoadImage( argv[1] );
  113. cvNamedWindow( "Example", CV_WINDOW_AUTOSIZE );
  114.  
  115. IplImage* out = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
  116. cvSmooth( img, out, CV_GAUSSIAN, 9, 9 );
  117.  
  118. cvShowImage( "Example", out );
  119. cvWaitKey( 0 );
  120. cvReleaseImage( &img );
  121. cvDestroyWindow( "Example" );
  122.  
  123. return 0;
  124. }
  125. */
Add Comment
Please, Sign In to add comment