OpenCV Object detection tutorial

匿名 (未验证) 提交于 2019-12-03 01:25:01

问题:

I'm new to OpenCV platform. I've installed and successfully run some tutorial codes(inbuilt). But I'm facing some issues with the codes involving haarcascade.The code builds perfectly and also the webcam seems to flash light and work but the code displays blank window as attached.image

Can anyone suggest some rectification for the problem?

(I'm using opencv version 3.0.0 and Visual Studios 2013.)

    #include "stdafx.h"     #include "opencv2/objdetect.hpp"     #include "opencv2/videoio.hpp"     #include "opencv2/highgui.hpp"     #include "opencv2/imgproc.hpp"      #include      #include      using namespace std;     using namespace cv;      /** Function Headers */     void detectAndDisplay( Mat frame );      /** Global variables */     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";     /** @function main */    int main( void )     {     VideoCapture capture; Mat frame;  //-- 1. Load the cascades if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading face cascade\n"); return -1; }; if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading eyes cascade\n"); return -1; };  //-- 2. Read the video stream capture.open( -1 ); if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }  while ( capture.read(frame) ) {     if( frame.empty() )     {         printf(" --(!) No captured frame -- Break!");         break;     }      //-- 3. Apply the classifier to the frame     detectAndDisplay( frame );      int c = waitKey(10);     if( (char)c == 27 ) { break; } // escape } return 0;     }      /** @function detectAndDisplay */     void detectAndDisplay( Mat frame )    {         std::vector faces; Mat frame_gray;  cvtColor( frame, frame_gray, COLOR_BGR2GRAY ); equalizeHist( frame_gray, frame_gray );  //-- Detect faces face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );  for ( size_t i = 0; i  eyes;      //-- In each face, detect eyes     eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );      for ( size_t j = 0; j 

回答1:

i think it is a known bug

could you try my updated code ( i pointed out the changes by comments)

#include "opencv2/objdetect.hpp" #include "opencv2/videoio.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include  // additional header ************************  #include  #include   using namespace std; using namespace cv;  /** Function Headers */ void detectAndDisplay( Mat frame );  /** Global variables */ 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";  /** @function main */ int main( void ) {     ocl::setUseOpenCL(false); // disable OpenCL *******************     VideoCapture capture;     Mat frame;      //-- 1. Load the cascades     if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading face cascade\n"); return -1; };     if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading eyes cascade\n"); return -1; };      //-- 2. Read the video stream     capture.open( 0 ); // Open webcam 0 ***************************     if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }      while ( capture.read(frame) )     {         if( frame.empty() )         {             printf(" --(!) No captured frame -- Break!");             break;         }          //-- 3. Apply the classifier to the frame         detectAndDisplay( frame );          int c = waitKey(10);         if( (char)c == 27 ) { break; } // escape     }     return 0; }  /** @function detectAndDisplay */ void detectAndDisplay( Mat frame ) {     std::vector faces;     Mat frame_gray;      cvtColor( frame, frame_gray, COLOR_BGR2GRAY );     equalizeHist( frame_gray, frame_gray );      //-- Detect faces     face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );      for ( size_t i = 0; i  eyes;          //-- In each face, detect eyes         eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );          for ( size_t j = 0; j 


转载请标明出处:OpenCV Object detection tutorial
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!