1

我在 ubuntu 上使用 opencv 将 Eclipse 用于我的异议检测代码。我构建了下面的代码,它没有给我任何错误,即使是二进制文件也是 formrd 但是当我运行代码时,它没有给出任何结果,也没有捕获我的相机。

#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

/** Function Headers */
void detectAndDisplay( Mat frame );


 String face_cascade_name = "haarcascade_frontalface_alt.xml";
  String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
  CascadeClassifier face_cascade;
   CascadeClassifier eyes_cascade;
   string window_name = "Capture - Face detection";
   RNG rng(12345);


   int main( void )
   {
  CvCapture* capture;
  Mat frame;

    //-- 1. Load the cascades
      if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
    if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

    //-- 2. Read the video stream
     capture = cvCaptureFromCAM( -1 );
   if( capture )
    {
         for(;;)
    {
        frame = cvQueryFrame( capture );

        //-- 3. Apply the classifier to the frame
         if( !frame.empty() )
           { detectAndDisplay( frame ); }
          else
           { printf(" --(!) No captured frame -- Break!"); break; }

       int c = waitKey(10);
       if( (char)c == 'c' ) { break; }

      }
      }
     return 0;
    }


   void detectAndDisplay( Mat frame )
   {
    std::vector<Rect> faces;
     Mat frame_gray;

     cvtColor( frame, frame_gray, CV_BGR2GRAY );
    equalizeHist( frame_gray, frame_gray );
     //-- Detect faces
         face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

      for( size_t i = 0; i < faces.size(); i++ )
       {
  Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2 );
  ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2), 0, 0, 360, Scalar( 255, 0, 255 ), 2, 8, 0 );

        Mat faceROI = frame_gray( faces[i] );
       std::vector<Rect> eyes;

        //-- In each face, detect eyes
        eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

        for( size_t j = 0; j < eyes.size(); j++ )
         {
          Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2 );
          int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
           circle( frame, eye_center, radius, Scalar( 255, 0, 0 ), 3, 8, 0 );
             }
          }
            //-- Show what you got
               imshow( window_name, frame );
               }
4

0 回答 0