Update objectDetection.cpp
authorSuleyman TURKMEN <sturkmen@hotmail.com>
Thu, 19 Jan 2017 09:17:53 +0000 (11:17 +0200)
committerSuleyman TURKMEN <sturkmen@hotmail.com>
Mon, 6 Mar 2017 13:51:29 +0000 (16:51 +0300)
doc/tutorials/objdetect/cascade_classifier/cascade_classifier.markdown
samples/cpp/tutorial_code/objectDetection/objectDetection.cpp
samples/cpp/tutorial_code/objectDetection/objectDetection2.cpp [deleted file]

index 6589a1c..53ed36e 100644 (file)
@@ -19,8 +19,6 @@ Code
 
 This tutorial code's is shown lines below. You can also download it from
 [here](https://github.com/opencv/opencv/tree/master/samples/cpp/tutorial_code/objectDetection/objectDetection.cpp)
-. The second version (using LBP for face detection) can be [found
-here](https://github.com/opencv/opencv/tree/master/samples/cpp/tutorial_code/objectDetection/objectDetection2.cpp)
 @include samples/cpp/tutorial_code/objectDetection/objectDetection.cpp
 
 Explanation
@@ -34,8 +32,8 @@ Result
 
     ![](images/Cascade_Classifier_Tutorial_Result_Haar.jpg)
 
-    Remember to copy the files *haarcascade_frontalface_alt.xml* and
-    *haarcascade_eye_tree_eyeglasses.xml* in your current directory. They are located in
+    Be sure the program will find the path of files *haarcascade_frontalface_alt.xml* and
+    *haarcascade_eye_tree_eyeglasses.xml*. They are located in
     *opencv/data/haarcascades*
 
 -#  This is the result of using the file *lbpcascade_frontalface.xml* (LBP trained) for the face
index fe321ec..71097a8 100644 (file)
@@ -13,15 +13,25 @@ using namespace cv;
 void detectAndDisplay( Mat frame );
 
 /** Global variables */
-String face_cascade_name = "haarcascade_frontalface_alt.xml";
-String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
+String face_cascade_name, eyes_cascade_name;
 CascadeClassifier face_cascade;
 CascadeClassifier eyes_cascade;
 String window_name = "Capture - Face detection";
 
 /** @function main */
-int main( void )
+int main( int argc, const char** argv )
 {
+    CommandLineParser parser(argc, argv,
+        "{help h||}"
+        "{face_cascade|../../data/haarcascades/haarcascade_frontalface_alt.xml|}"
+        "{eyes_cascade|../../data/haarcascades/haarcascade_eye_tree_eyeglasses.xml|}");
+
+    cout << "\nThis program demonstrates using the cv::CascadeClassifier class to detect objects (Face + eyes) in a video stream.\n"
+            "You can use Haar or LBP features.\n\n";
+    parser.printMessage();
+
+    face_cascade_name = parser.get<string>("face_cascade");
+    eyes_cascade_name = parser.get<string>("eyes_cascade");
     VideoCapture capture;
     Mat frame;
 
@@ -30,7 +40,7 @@ int main( void )
     if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading eyes cascade\n"); return -1; };
 
     //-- 2. Read the video stream
-    capture.open( -1 );
+    capture.open( 0 );
     if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
 
     while ( capture.read(frame) )
diff --git a/samples/cpp/tutorial_code/objectDetection/objectDetection2.cpp b/samples/cpp/tutorial_code/objectDetection/objectDetection2.cpp
deleted file mode 100644 (file)
index e57139b..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * @file objectDetection2.cpp
- * @author A. Huaman ( based in the classic facedetect.cpp in samples/c )
- * @brief A simplified version of facedetect.cpp, show how to load a cascade classifier and how to find objects (Face + eyes) in a video stream - Using LBP here
- */
-#include "opencv2/objdetect.hpp"
-#include "opencv2/videoio.hpp"
-#include "opencv2/highgui.hpp"
-#include "opencv2/imgproc.hpp"
-
-#include <iostream>
-#include <stdio.h>
-
-using namespace std;
-using namespace cv;
-
-/** Function Headers */
-void detectAndDisplay( Mat frame );
-
-/** Global variables */
-String face_cascade_name = "lbpcascade_frontalface.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 cascade
-    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 );
-
-        //-- bail out if escape was pressed
-        char c = (char)waitKey(10);
-        if( c == 27 ) { break; }
-    }
-    return 0;
-}
-
-/**
- * @function detectAndDisplay
- */
-void detectAndDisplay( Mat frame )
-{
-    std::vector<Rect> 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, Size(80, 80) );
-
-    for( size_t i = 0; i < faces.size(); i++ )
-    {
-        Mat faceROI = frame_gray( faces[i] );
-        std::vector<Rect> eyes;
-
-        //-- In each face, detect eyes
-        eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE_SCALE_IMAGE, Size(30, 30) );
-        if( eyes.size() == 2)
-        {
-            //-- Draw the face
-            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, 0 ), 2, 8, 0 );
-
-            for( size_t j = 0; j < eyes.size(); j++ )
-            { //-- Draw the eyes
-                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, 255 ), 3, 8, 0 );
-            }
-        }
-
-    }
-    //-- Show what you got
-    imshow( window_name, frame );
-}